Spring Boot 테스트 코드 작성 시 다양한 어노테이션 관련해서 정리하기 위한 용도입니다~
개인적으로 잘 이해되었던 블로그 글도 참고했으니 도움되시길 바랍니다~~
@RunWith, @ExtendWith???
참고 : https://www.whiteship.me/springboot-no-more-runwith/
- RunWith → JUnit4, ExtendWith → JUnit5에서 사용하는 것
- 개인적인 생각으로는 어떤게 더 우위가 있다고 말하긴 어려우나, 테스트 코드 작성 시 해당 기능을 지정하고(JUnit4 or JUnit5) 한가지를 통일되게 사용하는게 좋을 것 같습니다. 왜냐하면, 중구난방식으로 사용하다보면 테스트 코드가 제대로 동작하지 않을 수도 있고, 정확하게 어떻게 동작하는지 혼돈 될 수 있기 때문입니다.
@MockBean(spring) vs @Mock(mockito)
참고 : https://blusky10.tistory.com/330
- @MockBean은 org.springframework.boot.test.mock.mockito 패키지 하위에 존재.
- @Mock은 mockito 패키지 하위 존재
@MockitoJUnitRunner, @SpringRunner
참고 : https://hwannny.tistory.com/87
- SpringRunner.class → SpringJUnit4ClassRunner 클래스를 상속받는다. 단지, 클래스명을 짧게 만들어주기 위한 용도일까???
@SpringBootTest, @AutoConfigureMockMvc, @WebMvcTest
참고 : https://astrid-dm.tistory.com/536
- WebMvcTest
- MVC를 위한 테스트. 컨트롤러가 예상대로 작동되는지 테스트하기 위해 사용
- Web Layer만 로드. @WebMvcTest를 통해서 아래의 항목들만 스캔하도록 제한. 따라서 가볍고 빠른 테스트가 가능하다→ 스캔 X : @Service, @Component
- → 스캔 O : @Controller, @ControllerAdvice, @JsonComponent, @Convert, Filter, WebMvcConfigurer, Handler, MethodArgumentResolver, request / response Handlig 등
- SpringBootTest
- 실제 서비스 애플리케이션처럼 모든 내용을 구동. 즉, 빌드되는 시간이 굉장히 길다.
- 소스 크기가 커질수록 빌드되는 시간이 굉장히 길어지기 때문에 “통합테스트"에 더 적합한 어노테이션인 것 같다.(물론, 단위 테스트로 사용해도 괜찮으나 상대적으로 단위 테스트의 목적을 달성하기 위한 적합한 용도라고는 볼 수 없을것 같다.)
- “단위테스트” 의도에는 부적합 한듯. why? 단위 테스트 목적은 짧은 시간내 소스가 제대로 동작하는지 빠르게 테스트하기 위한 용도이다. 개인마다 프로젝트 빌드 타임 짧고 긴건 상대적으로 다르나……. 개인적으로는 비추…
'Spring Boot' 카테고리의 다른 글
Firebase Push Service (0) | 2022.08.18 |
---|