일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Spring
- 링커
- 빌드툴
- String
- hibernate
- JPA
- java
- 클린코드
- 토비의스프링3.1
- Immutable
- AutoConfiguration
- gradle
- Kotlin for Java Developers
- beanfactory
- springwebmvc
- 링킹
- ORM
- DesignPattern
- 프록시
- exception
- lambda
- FunctionalInterfaces
- ApplicationContext
- 컴퓨터시스템
- springboot
- 토비의스프링
- 자바
- 메이븐
- DispatcherServlet
- IOC
- Today
- Total
엔지니어로 가는 길
@WebMvcTest 테스트에서 Formatter가 동작하지 않는 이유 본문
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).
얘는 slicing test를 의미한다. 즉, Web 계층과 관련된 bean만 테스트 환경에 등록해준다는 뜻이다. Formatter는 그저 @Component이므로 따로 추가해주어야 한다. 다음과 같이 추가해줄 수 있다.
근데 이제보니 @WebMvcTest를 붙이면 @Controller를 자동으로 등록해준다고 되어있는데 왜 @WebMvcTest에 Controller.class를 주지 않으면 Controller를 못 찾지? 이건 다음에 찾아봐야겠다.
'프로그래밍 > Spring' 카테고리의 다른 글
Spring에서 axios post으로 보낸 요청 매개변수를 못받는 문제 (2) | 2020.11.13 |
---|---|
Formatter 없이도 변환이 되는 경우 (0) | 2020.09.19 |
@ModelAttribute도 Formatter가 필요할까 (0) | 2020.08.25 |
웹 환경에서 스프링 애플리케이션의 동작 방식 (0) | 2020.07.06 |
스프링 애플리케이션의 동작 방식 (0) | 2020.07.06 |