본문 바로가기
스프링부트와 AWS

#3-3_ 스프링부트 테스트코드 작성시 @WebMvcTest 와 @AutoConfigureMockMvc 의 차이점

by Meaning_ 2021. 7. 23.
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

 

Spring Boot MVC Test - MockMvc is always null

I'm trying to write my first Spring MVC test but I just cannot get Spring Boot to inject the MockMvc dependency into my test class. Here is my class: @WebMvcTest public class WhyWontThisWorkTest {...

stackoverflow.com

 

https://elevatingcodingclub.tistory.com/61

 

[SpringBoot] Test(2) MockMvc를 이용해서 테스트하기(@WebMvcTest, @AutoConfigureMockMvc)

Mock - Mock이라는 단어를 사전에서 찾아보면 '테스트를 위해 만든 모형'을 의미한다. - 테스트를 위해 실제 객체와 비슷한 모의 객체를 만드는 것을 모킹(Mocking)이라고 하며, 모킹한 객체를 메모리

elevatingcodingclub.tistory.com

 

728x90
반응형

댓글