엔지니어로 가는 길

@WebMvcTest 테스트에서 Formatter가 동작하지 않는 이유 본문

프로그래밍/Spring

@WebMvcTest 테스트에서 Formatter가 동작하지 않는 이유

탐p슨 2020. 9. 17. 22:09
728x90

PathVariable로 LocalDate 꼴의 문자열을 LocalDate 타입의 객체로 받는 메소드를 만들고 싶었다.

 

 

테스트 코드를 작성하였다.

 

 

결과는 실패. 메소드 인자 타입이 맞지 않아서 문제가 되었다고 하니 String을 LocalDate 타입으로 변환해주는 게 default로 설정되어있지는 않은가 보다. LocalDate 타입 정도는 등록되어있을 줄 알았기 때문에 살짝 당황했다. 그래서 Formatter를 만들었다. Formatter 만들어 등록하면 String과 Object 간의 변환이 가능해지기 때문이다.

 

 

Spring boot를 이용할 경우 Formatter를 bean으로만 등록해주면 알아서 등록이 이루어진다. 근데 테스트가 또 깨졌다. 같은 이유로 말이다. Formatter가 제기능을 못했단 뜻이다. 혹시나 해서 Formatter를 FormatterRegistry에 직접 등록하고 테스트를 돌려봤지만 역시 깨졌다. 침착하게 돌아보니 @WebMvcTest가 눈에 들어왔다.

 

 

Using this annotation will disable full auto-configuration and instead apply only configuration relevant

to MVC tests (i.e. @Controller, @ControllerAdvice, @JsonComponent, Converter/GenericConverter,

Filter, WebMvcConfigurer and HandlerMethodArgumentResolver beans but

not @Component, @Service or @Repository beans).

(출처: docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTest.html)

 

얘는 slicing test를 의미한다. 즉, Web 계층과 관련된 bean만 테스트 환경에 등록해준다는 뜻이다. Formatter는 그저 @Component이므로 따로 추가해주어야 한다. 다음과 같이 추가해줄 수 있다.

 

 

 

근데 이제보니 @WebMvcTest를 붙이면 @Controller를 자동으로 등록해준다고 되어있는데 왜 @WebMvcTest에 Controller.class를 주지 않으면 Controller를 못 찾지? 이건 다음에 찾아봐야겠다.

728x90
Comments