728x90
반응형
스프링부트 테스트 코드를 작성할 때
java.lang.NullPointerException이 떴다. 그래서 @WebMvcTest 을 @AutoConfigureMockMvc으로 변경해줬다.
그렇다면 @WebMvcTest 와 @AutoConfigureMockMvc은 무엇일까?
우선 이 둘은 MockMVC를 제어하는 annotation이다.
테스트를 위해 실제 객체와 비슷한 객체를 만드는 것을 모킹(Mocking)이라고 하고, 테스트 하려는 객체가 복잡한 의존성을 가지고 있을 때, 모킹한 객체를 이용하면 의존성을 단절시킬 수 있어 쉽게 테스트 가능하다.
@WebMvcTest | @AutoConfigureMockMvc | |
공통점 | 웹 애플리케이션에서 컨트롤러를 테스트 할 때, 서블릿 컨테이너를 모킹하기 위해서는 @WebMvcTest 또는 @AutoConfigureMockMvc를 사용하면 된다. | |
차이점 | - 웹에서 테스트하기 힘든 컨트롤러를 테스트 하는데 적합 - 웹 상에서 요청과 응답에 대해 테스트할 수 있을 뿐만 아니라 시큐리티 혹은 필터까지 자동으로 테스트하여 수동으로 추가/삭제 가능 - 일반적으로 @MockBean 또는 @Import와 함께 사용되어 @Controller 빈에 필요한 협력자를 생성한다. - 여러 스프링 테스트 어노테이션 중 Web에 집중할 수 있는 어노테이션 - 선언할 경우 @Controller,@ControllerAdvice등을 사용 가능 - 단, @Service, @Component, @Repository 등은 사용 불가 |
- @WebMvcTest와 비슷하게 사용할 수 있는 어노테이션이다. - @WebMvcTest와 가장 큰 차이점은 컨트롤러 뿐만 아니라 테스트 대상이 아닌 @Service나 @Repository사 붙은 객체들도 모두 메모리에 올린다. - 간단하게 테스트 하기 위해서는 @AutoConfigureMockMvc가 아닌 @WebMvcTest를 사용해야 한다. - MockMVC를 보다 세밀하게 제어하기 위해 사용하며,전체 애플리케이션 구성을 로드하고 MockMVC를 사용하려는 경우 @WebMvcTest보다 @AutoConfigureMockMvc와 결합된 @SpringBootTest를 고려해야 한다. |
+)@WebMvcTest는 @SpringBootTest와 같이 사용될 수 없다. 왜냐하면 각자 서로의 MockMvc를 모킹하기 때문에 충돌이 발생하기 때문
MockMVC를 보다 세밀하게 제어하려면 @AutoConfigureMockMvc 주석을 사용할 수 있다.
참고자료
https://stackoverflow.com/questions/59534247/spring-boot-mvc-test-mockmvc-is-always-null
https://elevatingcodingclub.tistory.com/61
728x90
반응형
'스프링부트와 AWS' 카테고리의 다른 글
#4_스프링 부트에서 JPA로 데이터베이스 다루기 (0) | 2021.08.05 |
---|---|
#3-2_스프링부트에서 테스트코드 작성 +java.lang.NullPointerException 에러 해결방법 (0) | 2021.07.23 |
#3-1_스프링부트에서 테스트 코드를 작성 + 인텔리제이 테스트 코드 작성시 cannot resolve symbol 에러 해결방법 (0) | 2021.07.21 |
#2_인텔리제이에서 깃과 깃허브 연동과 git@github.com: permission denied (publickey) 오류 생겼을 때 대처법 (0) | 2021.07.19 |
#1_그레이들 프로젝트를 스프링부트 프로젝트로 변경하기 (0) | 2021.07.16 |
댓글