해결된 질문
작성
·
360
0
Converter와 Formatter를 통한 data binding 예제를 따라하던 중 궁금한 점이 있습니다.
Converter를 bean으로 등록한 경우 test code의 @WebMvcTest annotation에 명시적으로 Converter bean class를 등록하지 않아도 test code가 통과되었는데, Formatter를 bean으로 등록한 경우에는 EventController와 Formmater class를 @WebMvcTest에 명시해야만 통과되는 것을 확인했습니다. 어떤 이유에서 이렇게 되는 것인지 궁금합니다.
Here is my code -> https://github.com/camel-master/SpringBootExample.git
답변 4
1
해당 컨트롤러가 포매터를 사용하는 경우라고 가정하고 말씀드리자면, 컨트롤러나 컨버터는 문서에 나와있는대로 @WebMvcTest가 자동으로 스캔해서 빈으로 등록해 주지만, 포매터는 스캔하기 않기 떄문에 컨트롤러가 사용하려는 포매터가 null일꺼고 그래서 테스트가 동작하지 않았을꺼라고 예상되네요.
0
0
말씀하신대로 @WebMvcTest에 관한 문서를 확인했으며 Converter는 @WebMvcTest configuration에 포함되는 것을 알게 되었습니다. 따라서 Converter class는 bean으로 등록하지 않아도 정상 동작 하는 것에 대해서는 납득이 되었습니다.
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).
다만 아직까지 풀리지 않은 점은 문서상에서 @WebMvcTest는 @Controller bean들을 configuration에 포함한다고 되어있는데 Formatter를 bean으로 등록하는 경우 @WebMvcTest에 Formatter class뿐 아니라 Controller class(EventController.class)를 포함하지 않으면 test code를 통과할 수 없다는 것입니다. 왜 그러는 것일까요?
0
@WebMvcTest 애노테이션의 JavaDoc을 찾아서 읽어보시면 알 수 있습니다. 찾아서 읽어보신 다음에도 이해가 잘 되지 않으시면 그때 다시 아래에 댓글 달아주세요.