티스토리 뷰

반응형

문제 발생

 

Spring으로 개발하면서 Controller를 테스트하는 중에 아래와 같은 타입 문제가 발생하였다. 

 

Controller를 실행해서 얻고자 하는 최종 값의 형태는 Long 타입이었으나,

실제 반환 값은 Integer 타입이었고, 테스트에 실패하였다는 메시지가 출력되었다. 

[ 기대값과 실제값의 타입이 다르다는 메시지 출력 화면 ]

 

 

 

이유

 

해당 이유는 Jackson 을 이용하여 Deserializer 할 때 발생하는 것으로, 타입이 명확하지 않을 경우, 해당 값에 대한 최적의 타입을 자동으로 할당해준다고 한다. 그렇기 때문에, Long 타입의 1 이었어도, 자동으로 1을 Integer 타입으로 변환하여, 출력하였고, 에러가 발생한 것이다. 자세한 내용은 하단 Reference 를 참고하자. 

 

 

 

해결방법

 

타입을 명확하게 지정하면 된다.

기존 작성 코드는 아래와 같이, jsonPath 메서드에 파라미터 2개를 받아서 일치 여부를 확인하였다.

 

Type 명시를 위해, jsonPath 메서드를 포함하는 MockMvcResultMatchers 클래스를 확인해 보았다. 

MockMvcResultMatchers 클래스에는 다양한 jsonPath 메서드가 있는데, 그 중에서 반환 값에 타입을 강제화 시키는 jsonPath 메서드가 있다.

[ MockMvcResultMatchers 클래스에서 타입을 강제화할 수 있는 jsonPath 메서드 ]

 

해당 jsonPath 메서드를 이용하여, 반환 결과 타입을 강제화하면, 원하는 타입으로 변경되어 반환되는 것을 확인할 수 있다. 아래는 해당 메서드를 적용한 코드이다.

 

 

 

 

Reference

https://nesoy.github.io/articles/2018-04/Java-JSON

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
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 31
글 보관함