인프런 워밍업 클럽 스터디 2기 - 백엔드 클린코드, 테스트코드 4주차 발자국
Section7) Mock을 마주하는 자세
Test Double의 종류
1) Dummy : 아무것도 하지 않는 깡통 객체
2) Fake : 단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 부족한 객체 (ex, FakeRepository)
3) Stub : 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체, 그 외에는 응답하지 않는다.
//상태 검증 (State Verification)
4) Spy : Stub이면서 호출된 내용을 기록하여 보여줄 수 있는 객체,
일부는 실제 객체처럼 동작시키고 일부만 Stubbing할 수 있다,
5) Mock : 행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체
//행위 검증 (Behavior Verification)
.
BDDMockito
BDDMockito는 Mockito에서 BDD 스타일에 맞추어 모든것의 이름만 바꾼 것이다.
일례로 given 구역에 .when()을 쓰면 이질감이 들기 떄문에 BDDMockito가 생긴 것이다.
.
Classicist VS Mockist
1) Classicist
- 꼭 필요한 경우에만 mocking을 쓰고 왠만하면 진짜 객체로 테스트 하자는 주의이다.
2) Mockist
- 모든 것을 Mocking 위주로 하여 테스트 하자는 주의이다.
.
Section8) 더 나은 테스트를 작성하기 위한 구체적 조언
1) 한 문단에 한 주제!
- DisplayName을 한 문장으로 구성할 수 있어야 한다~!
2) 완벽하게 제어하기
3) 테스트 환경의 독립성을 보장하자
- 테스트에서는 팩토리 메서드를 지양하고 Buider나 생성자를 통해 최대한 독립성을 보장해서 given절을 구성하는게 좋다.
4) 테스트 간 독립성을 보장하자
- 테스트간의 공유자원 사용하지 않기.
- 테스트간의 독립성 보장하기~!
5) 한 눈에 들어오는 Test Fixture 구성하기
- Fixture : 고정룰, 고정되어 있는 물체
- Test Fixture : 테스트를 위해 원하는 상태로 고정시킨 일련의 객체
6) Test Fixture 클렌징
- @Transactional, @rollback 방식과 deleteAllInBatch(), deleteAll() 등을 잘 알고 사용해야 한다.
7) @ParameterizedTest
8) @DynamicTest
9) 테스트 수행도 비용이다. 환경 통합하기
- @DataJPATest 보다 @SpringbootTest 사용을 권장한다.
- 컨트롤러(통합) 테스트시 @WebMvcTest의 Controllers 옵션을 통해 특정 컨트롤러들만 지정하여 테스트해줌으로써 테스트 수행 비용을 줄여준다.
10) private 메서드는 테스트할 필요가 없다.
11) 테스트에서만 필요한 메서드 중 생성자 등은 프로덕션 코드에 생성해도 좋다.
.
Section9) AppendIx
1) 학습 테스트
- 잘 모르는 기능, 라이브러리, 프레임워크를 학습하기 위해 작성하는 테스트
- 여러 테스트 케이스를 스스로 정의하고 검증하는 과정을 통해 보다 구체적인 동작과 기능을 학습할 수 있다.
- 관련 문서만 읽는 것보다 훨씬 재미있게 학습할 수 있다.
2) Spring Rest Docs
- 테스트 코드를 통한 API 문서 자동화 도구
- API 명세를 문서로 만들고 외부에 제공함으로써 협업을 원활하게 한다.
- 장점
→ 테스트를 통과해야 문서가 만들어진다 (신뢰도가 높다)
→ 프로덕션 코드에 비침투적이다.
- 단점
→ 코드 양이 많다.
→ 설정이 어렵다.
.
Day-15 Mission) 레이어드 아키텍처에서의 테스트 코드 작성
강의로 배운 레이어드 아키텍처 관련 내용을 확장시켜 정리할 수 있어 좋았다.
.
Day-18 Mission) Test Double 어노테이션 이해 및 테스트 항목 배치
@Mock, @MockBean, @Spy, @SpyBean, @InjectMocks의 차이점을 정리하고 given-when-then 전략으로 테스트 코드 배치 방법을 고민해 볼 수 있어 좋았다.
.
.
회고
오늘로써 인프런 워밍업 클럽 스터디 2기 대장정이 마무리 되었다.
클린코드와 테스트코드는 누구나 중요성을 알지만, 혼자서 공부하기 쉽지 않은 부분이다.
강의를 완벽하게 이해하지는 못했지만, 강의를 통해 Clean Code와 Test Code에 한 발자국 더 다가갈 수 있었고,
실무에도 점차적으로 적용 해보면서 뜻 깊은 경험을 할 수 있었다.
다음에 인프런 스터디 3기가 열린다면 재참여를 고려해 봐야겠다
마지막으로 강의와 스터디를 만들어주신 박우빈님과 스터디 관리에 힘써주신 셰리 매니저님께 감사의 마음을 전합니다.
.
출처
댓글을 작성해보세요.