[워밍업 클럽 2기 BE 클린코드&테스트] 4주차 회고
들어가며
테스트 코드 작성에 대해 학습하면서, 특히 Mock 사용법과 더 나은 테스트 작성 방법에 대해 깊이 있게 배울 수 있었습니다. 이 회고에서는 주요 학습 내용과 깨달음을 정리해보고자 합니다.
Mock에 대한 새로운 시각
Test Double의 이해
처음에는 Mock과 Stub을 같은 개념으로 혼동했었는데, 이번 학습을 통해 둘의 차이점을 명확히 이해하게 되었습니다. 특히 Test Double의 다양한 종류(Dummy, Stub, Spy, Mock, Fake)를 배우면서, 각각의 사용 목적과 상황이 다르다는 것을 알게 되었습니다.
Mockito 사용의 실제
@Mock, @Spy, @InjectMocks의 차이점을 배우면서 특히 인상 깊었던 점은:
- @Spy를 통해 실제 객체의 특정 메소드만 모킹할 수 있다는 점
- BDDMockito를 사용하면 테스트 코드가 더 자연스러워진다는 점
이러한 도구들을 적재적소에 활용하면 테스트의 가독성과 유지보수성을 크게 향상시킬 수 있다는 것을 깨달았습니다.
더 나은 테스트를 위한 깨달음
테스트 픽스처 관리의 중요성
이전에는 @BeforeEach에서 모든 테스트 데이터를 준비하는 것이 좋은 방법이라고 생각했습니다. 하지만 이는 테스트의 독립성과 가독성을 해칠 수 있다는 것을 배웠습니다. 특히:
1. 테스트별로 필요한 데이터만 명시적으로 준비하는 것의 중요성
2. SQL 파일로 데이터를 준비하는 방식의 단점
3. 테스트 간 독립성 보장의 중요성
새로운 테스트 기법 발견
@ParameterizedTest와 @DynamicTest를 처음 알게 되었는데, 이들이 제공하는 기능이 매우 유용하다고 느꼈습니다:
- @ParameterizedTest로 여러 케이스를 간단히 테스트
- @DynamicTest로 시나리오 기반 테스트 구현
실무적용 시 주의점
테스트 환경 통합
여러 개의 테스트 환경을 하나로 통합하여 성능을 개선할 수 있다는 점이 인상적이었습니다. 특히:
- 불필요한 서버 구동 최소화
- MockBean 처리의 효율적인 관리
Private 메소드 테스트에 대한 새로운 관점
private 메소드를 테스트하고 싶은 욕구가 생길 때, 이는 객체 분리가 필요하다는 신호라는 점을 배웠습니다. 이는 더 나은 설계로 이어질 수 있는 중요한 인사이트였습니다.
앞으로의 다짐
1. Classicist vs Mockist 균형 잡기
- Mock은 필요한 최소한으로 사용하되, 실제 동작을 최대한 테스트하도록 노력하겠습니다.
2. 테스트 품질 향상
- 한 테스트에서는 한 가지만 검증하도록 집중하겠습니다.
- 테스트 간 독립성을 철저히 지키겠습니다.
3. 문서로서의 테스트
- 테스트 코드가 문서의 역할을 할 수 있도록 더 명확하고 이해하기 쉽게 작성하겠습니다.
마무리
이번 학습을 통해 테스트 코드 작성에 대한 더 깊은 이해를 얻었습니다. 특히 Mock의 적절한 사용과 테스트 설계의 중요성을 깨달았습니다. 이러한 학습 내용을 실제 프로젝트에 적용하면서 더 나은 코드 품질을 만들어가고 싶습니다.
댓글을 작성해보세요.