https://www.maeil-mail.kr/question/83
요약: 안전한 코드의 리팩토링을 위해서는 코드가 변경 될 때, 기존의 기능이 잘 동작하는지의 여부를 알 수 있어야한다. 이를 위해서 우리는 테스트 코드를 작성하고, 이 테스트 코드에는 유닛 단위의 단위 테스트와 전체 단위의 통합테스트가 존재한다.
이 둘중에서는 당연히 유닛 테스트 코드가 훨씬 비용효율적이다.
왜냐하면 통합테스트의 디버깅시 해당 파트가 어디에서 오류가 났는지를 찾는데 시간이 걸리고, 통합테스트 내의 여러 모듈이 종속되어 있기 때문에, 이는 유지보수 관점에서 그리 좋은 테스트 코드가 아니다.
하지만 유닛테스트를 수행할 때, 만약 객체사이의 정보를 주고 받는 다면, 실제 객체를 넣는 것이 아닌 Mockito
를 활용한 가짜 객체를 반드시 넣어주어야한다.
기본적으로 spring과 관련된 @SpringBootTest
의 경우 spring환경에서 모든 컴포넌트들을 로드하고 세팅해서, 테스트 코드를 돌리므로 시간비용이 많이 들 수밖에 없다. 이럴 때 각 레이어, 즉 컨트롤러,서비스,리포지토리에 대해서만 테스트 코드가 필요하다면 @WebMvcTest
, @DataJpaTest
를 통해서 특정 컴포넌트만 스프링이 로드해서 테스트 하므로 상대적으로 빠르게 실행된다.
이 때 만약 다른 레이어에 종속되어 있다면 @MockBean
등을 이용해서 모킹화 시켜주는 작업이 필요하다.
참고: https://tecoble.techcourse.co.kr/post/2021-05-18-slice-test/