
워밍업 클럽 3기 BE 클린코드 3주차 발자국
3주차를 마무리하며...
테스트 코드에 대해서 공부하는 시간을 가졌습니다.
실무에서도 red
green
refactoring
을 습관화해서 사용하면 심리적으로 안정감 있는 직장 생활이 될 것 같다는 생각이 들었습니다.
강의 내용정리
테스트 코드
테스트 코드(자동화 테스트)가 필요한 이유
수동으로 테스트를 진행하면 시간이 비효율적으로 사용됩니다.
인수인계가 어렵습니다.
수동으로 테스트하기에는 휴먼오류에 대한 리스크가 존재합니다.
테스트를 통해 얻고자 하는 것
빠른 피드백과 자동화 그리고 안정감을 얻을 수 있습니다.
단위 테스트
작은 코드 단위를 독립적으로 검증하는 테스트를 단위테스트라고 합니다.
외부에 의존하지 않고 검증을 하도록 설계하여 속도가 빠르고 안정적입니다.
단위 테스트 작성할 때 주의점
암묵적이거 아직 드러나지 않은 요구사항이 있는가? 에 대한 의문을 가지며 테스트 케이스를 세분화 하여야 합니다.
해피케이스, 예외케이스에 대해서 고루 케이스를 세분화하여야 합니다.
테스트하기 어려운 값 (외부 값, 시간)에 대해서는 분리하여 테스트에 용이한 구조로 만드는 것이 좋습니다.
Layered Architecture와 테스트
Persistence Layer Test
쿼리가 의도대로 잘 작성이 되었는지 확인합니다.
쿼리를 구현하는 기술이 바뀌어도 기능의 동작을 보장하도록 테스트를 작성합니다.
@DataJpaTest
를 사용해 테스트를 진행하는 경우에는 Persistence Layer에 필요한 빈들만 주입받으며, 자동으로 테스트 후에roll back
을 해줍니다.
Business Layer Test
Persistence Layer와 상호작용을 통해 비즈니스 로직을 전개하며, 이를 테스트 합니다.
요청값부터 만들어서 비즈니스 로직을 테스트 합니다.
트랜잭션을 보장하는지 확인합니다.
Presentation Layer Test
주요 로직은 business+persistence의 트랜잭션 경계내에서 끝나므로, presentation 에서는 외부에서 들어오는 값 검증을 주로 수행합니다.
의존 관계를 가짜객체를 사용해서 환경을 재현합니다.
@WebMvcTest, @MockBean, MockMvc 객체 등을 사용합니다.
미션 Day 11
저는 스터디 카페를 프로그램에 테스트 코드를 추가 하였습니다. [깃 허브](https://github.com/lkwoung88/readable-code/commit/7be5050a1c76e78809d85258aadbddfc3a430f3a)
계산, 판정 로직에 대해서 테스튼는 큰 고민없이 작성하였지만, 파일에서 읽어오는 부분은 어떻게 테스트하면 좋을지 고민을 많이 하다가 결국에는 작성하지 못했습니다.
댓글을 작성해보세요.