inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 클럽 3기] BE 클린코드&테스트 - 4주차 발자국

rjf1138
0

💡 강의 핵심 내용 정리

💻Practical Testing


🔹 1. 왜 Mocking이 필요한가?

Mockito.when(mailSendClient.sendEmail(...)).thenReturn(true);

🔹 2. Mail 전송은 @Transactional을 붙이면 안 되는 이유


🔹 3. Test Double의 종류

유형 설명 Dummy 사용되지 않는, 껍데기 객체 Fake 간단한 구현을 가진 실제 객체 (Map 기반 Repository 등) Stub 미리 정의된 응답을 제공하는 객체 (상태 검증용) Spy 일부는 실제처럼, 일부는 Stub. 호출 기록 추적 가능 Mock 행위 기반 검증용 객체 (몇 번 호출되었는지 등 검증)

💡 Stub은 상태 검증, Mock은 행위 검증에 사용됨.


🔹 4. 순수 Mockito 사용법

doReturn(true).when(mailSendClient).sendEmail(...);

🔹 5. BDDMockito

BDDMockito.given(mailSendClient.sendEmail(...)).willReturn(true);

🔹 6. Classicist vs Mockist

구분 Classicist Mockist 테스트 단위 실제 객체로 통합 테스트 협력 객체는 모두 Mock 강조점 시스템 동작 검증 객체 간 상호작용 검증 사용 시점 DB, HTTP 연동 등 진짜 동작 필요할 때 외부 의존이 많거나, 로직 복잡도 높은 객체

일반적으로는 Classicist 접근을 사용하고, 외부 시스템 등 불가피한 경우에만 Mocking을 하자!


🔹 7. 테스트 코드 개선 전략 요약

📌 한 문단에는 한 주제


📌 제어 가능한 값만 사용하라


📌 테스트 간 독립성 보장


📌 Test Fixture는 생성자 기반 / Builder 활용


📌@ParameterizedTest, @DynamicTest 적극 활용


📌 공통 테스트 환경 통합

@SpringBootTest
@ActiveProfiles("test")
public abstract class IntegrationTestSupport {}

📌 private 메서드는 테스트하지 말자

답변 0