오늘 진행한 학습 요약
1. 테스트코드 실습 특강
- Mocking이란?
- Mocking이 필요한 이유
- Mocking의 중요성
- Mocking 시 주의할 점
- Test Double 용어 정리
- 테스트 코드 실습
2. 알고리즘 코드카다 Day59~60(작성 생략)
CodingTest Git-hub 링크 : https://github.com/chews26/CodingTest
학습 정리
1. 테스트코드 실습 특강
Mocking이란?
- Mocking이란 테스트 코드 작성 시 실제 객체나 외부 의존성을 흉내 내는(Mock) 가짜 객체를 만들어 사용하는 기법입니다.
- 실제 서비스를 대체하는 가짜 서비스를 만들어 테스트를 진행합니다.
Mocking이 필요한 이유
- 외부 자원 의존 로직 테스트 간편화
- DB나 외부 API 호출을 대체하여 번거로움과 네트워크/셋업 문제를 해결.
- Mock 객체로 연결 없이도 테스트 가능.
- 독립적이고 빠른 테스트
- 단위 테스트는 작고 빠르게 돌아야 의미 있음.
- Mock을 사용해 핵심 로직 검증 가능.
- 복잡한 로직 단순화 및 에러 조기 발견
- 외부 로직을 단순화하여 내 코드 검증.
- 빠르게 에러 원인을 찾을 수 있음.
Mocking의 중요성
- 단위 테스트 독립성
- 외부 의존성과 분리하여 속도와 재현성 보장.
- 테스트 범위와 정확성 향상
- 다양한 시나리오(Mock으로 성공/실패 등) 제어.
- 유지 보수 용이성
- Mock을 사용하면 테스트 코드 가벼움.
- 빠른 피드백
- TDD, 빌드 파이프라인에서 빠르게 결과 확인.
- 결합도 감소
- DIP 원칙을 준수하고 인터페이스 기반 설계.
- 비즈니스 로직 검증 집중
- 핵심 로직 검증에 집중 가능.
Mocking 시 주의할 점
- 과도한 Mock 남발
- 실제 코드와 동작 차이를 놓칠 수 있음.
- 통합 테스트 병행 필요.
- 잘못된 Mock 설정
- when() 남발로 세부 구현에 의존적일 수 있음.
- 유지 보수 복잡성
- Mock 설정과 실제 로직 간의 갭이 발생할 수 있음.
- 명확한 이름 사용
- MockUserRepository, StubPaymentService처럼 명시적 네이밍.
Test Double 용어 정리
- Dummy
- 역할 없이 자리 채우기용.
- Fake
- 간이 구현체(예: In-memory DB).
- Stub
- 고정된 응답 반환.
- Spy
- Stub + 호출 이력 기록.
- Mock
- 기대치 설정 및 검증.
테스트 코드 실습
- Spring Boot 예제 구조
- 기술 스택
- Spring Boot, JUnit 5, Mockito, H2 Database, Lombok
- Controller 테스트
- @WebMvcTest로 Web 레이어 집중 테스트.
- @MockitoBean으로 Service Mocking.
- Service 테스트
- @Mock과 @InjectMocks로 의존성 주입.
- Mockito를 사용한 Stubbing.
- Repository 테스트
- @DataJpaTest로 JPA와 인메모리 DB(H2) 테스트.
- 기술 스택