컨트롤러 테스팅의 종류


서버 사이드 테스팅의 방법

  1. MockMVC in Standalone Mode

  2. MockMVC With WebApplicationContext

    @WebMvcTest

    Spring MVC 컴포넌트에만 집중한 Spring MVC Test에 사용될 수 있다. 이 어노테이션은 스프링 컨텍스트 전체의 auto-configuration을 지원하지 않는다. @Controller, @ControllerAdvice 등과 같은 MVC 테스트에만 관련된 설정 정보만 가져온다.

    기본적으로 이 어노테이션은 스프링 시큐리티와 MockMvc에 대한 auto-configure를 지원한다. 좀더 세밀한 제어를 위해선 @AutoConfigureMockMvc 주석을 사용할 수 있다.

    일반적으로 이 어노테이션은 @MockBean, @Import와 사용된다. 그 이유는 앞서 말했듯 컨트롤러와 관련된 빈 설정 정보만 가져오기 때문에 컨트롤러에 필요한 빈들을 주입하기 위해서다. 따라서 만약 전체 애플리케이션에 대한 빈을 주입해줘야 한다면, 차라리 @AutoConfigurationMockMvc을 결합한 @SpringBootTest를 사용하는 것이 낫다.

    JUnit4를 사용한다면 @RunWith(SpringRunner.class)와 같이 사용하면 된다.


Conclusion

  1. 다른 것들의 동작은 배재한, 컨트롤러 로직만을 위한 단위테스트는 항상 작성하려고 해야합니다.

    → 이때 첫번째 전략을 이용하세요 : use MockMVC in Standalone mode.

  2. 웹 계층과 관련된 주변 행동들을 테스트 해야한다면 ( 필터링, 인터셉터, 권한 등) 네번째 전략을 이용하세요 : SpringBootTest with a web server on a random port.