인프런 커뮤니티 질문&답변

김대희님의 프로필 이미지
김대희

작성한 질문수

스프링 프레임워크 핵심 기술

Converter, Formatter의 bean 등록 시 test code 통과와 관련한 질문

해결된 질문

작성

·

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 classbean으로 등록하지 않아도 정상 동작 하는 것에 대해서는 납득이 되었습니다.

 

Using this annotation will disable full auto-configuration and instead apply only configuration relevant to MVC tests (i.e. @Controller@ControllerAdvice@JsonComponentConverter/GenericConverterFilterWebMvcConfigurer 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을 찾아서 읽어보시면 알 수 있습니다. 찾아서 읽어보신 다음에도 이해가 잘 되지 않으시면 그때 다시 아래에 댓글 달아주세요.

김대희님의 프로필 이미지
김대희

작성한 질문수

질문하기