minho-jang / i-like-this-page

It's a widget that allows visitors to mark "LIKE" on your page.
1 stars 0 forks source link

Use ObjectMapper in test #75

Closed minho-jang closed 2 years ago

minho-jang commented 2 years ago

Closes #74

Jackson 라이브러리의 ObjectMapper는 json을 다룰 때 필요한 객체이다.

Spring에서 json 메시지를 변환하기 위해 MappingJackson2HttpMessageConverter에서 사용한다. JacksonAutoConfiguration에 의해서 ObjectMapper는 빈으로 등록된다.

문제

기존에 테스트 환경에서, 이를 @Autowired로 주입받아서 사용했다. 그럴 필요가 없다는 것을 느끼고 직접 new로 생성하여 테스트하려 했으나 에러가 발생했다.

과정

객체의 기본 생성자가 없기에 발생한 에러였다. 기본 생성자를 생성하여 해결할 수 있으나, 왜 주입받았을 때는 이게 필요가 없는지 살펴봤다.

디버깅 결과, 주입받은 ObjectMapperPropertyBasedCreator라는 필드를 가지고 있었고, 직접 생성한 ObjectMapper는 이 필드가 null이었다. 이 필드에 의해 분기된 이후에 기본 생성자를 확인하면서 에러를 뿜었다.

더 파고들어봐야 알겠지만, Spring에서 ObjectMapper는 Builder에 의해서 생성되는데 이 때 적용되는 config의 차이가 아닐까 짐작해본다.

결론

Lombok의 @NoArgsConstructor(access = AccessLevel.PRIVATE)를 추가한다.