해결된 질문
작성
·
77
0
아래와 같이 perform 과정에서 validator -> serialize로 넘어가는 부분에서 json 이 eventDTO를 찾을 수 없다는 에러가 발생하여 json을 직렬화할 수 없어서 error 메시지가 반환되지 않아 test 실패가 나타나는 것 같습니다. 혹시 버전 차이로 인해 필요한 어노테이션이나 함수가 달라져 발생하는 문제일까요? 관련하여 검색해도 답안을 찾기 어려워서 질문 드립니다. 감사합니다.
Inconvertible types; cannot cast 'org.example.springrestproject.Events.EventControllerTests' to 'org.springframework.test.util.JsonPathExpectationsHelper'
No value at JSON path "$[0].objectName"
java.lang.AssertionError: No value at JSON path "$[0].objectName"
at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:302)
at org.springframework.test.util.JsonPathExpectationsHelper.assertExistsAndReturn(JsonPathExpectationsHelper.java:326)
at org.springframework.test.util.JsonPathExpectationsHelper.exists(JsonPathExpectationsHelper.java:190)
at org.springframework.test.web.servlet.result.JsonPathResultMatchers.lambda$exists$3(JsonPathResultMatchers.java:123)
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:214)
at org.example.springrestproject.Events.EventControllerTests.createEvent_Bad_Request_Wrong_Input(EventControllerTests.java:149)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.IllegalArgumentException: json can not be null or empty
at com.jayway.jsonpath.internal.Utils.notEmpty(Utils.java:401)
at com.jayway.jsonpath.JsonPath.read(JsonPath.java:390)
at com.jayway.jsonpath.JsonPath.read(JsonPath.java:377)
at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:299)
... 8 more
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. shihi님.
강의 중 발생한 JSON 관련 오류로 인해 테스트가 실패하는 부분에 대한 질문을 주셔서 감사합니다.
해당 에러는 JsonPath
를 통해 특정 경로의 값을 참조하려다 발생하는 것으로 보입니다. 정확한 원인을 파악하기 위해선 아래 두 가지 항목을 점검해 보시는 것이 좋습니다.
MediaType
및 Accept
설정:
기본적으로 Spring 프로젝트에서 MediaType.APPLICATION_JSON
대신 MediaType.APPLICATION_JSON_UTF8
를 사용할 때 문제가 발생할 수 있습니다. 이를 해결하려면 컨트롤러와 테스트 코드에서 미디어 타입을 맞춰주는 것이 중요합니다.
JsonPath
, Enum
및 직렬화 문제:
JsonPath
를 사용해 JSON 데이터를 검증할 때 Enum
타입의 값을 문자열로 비교해야 할 때가 있습니다. 이때, enum 값을 바로 비교하면 타입 불일치 오류가 발생할 수 있습니다.
관련된 문제로 도움이 될 만한 유사한 질문과 답변들을 링크해드리니, 확인해보시길 추천드립니다.
JsonPath
를 통해 Enum
값을 비교할 때 문자열로 변환하여 비교하는 방법과 Enum
타입의 JSON 직렬화를 다루는 방법에 대한 설명이 포함되어 있습니다.ErrorsResource
설정법 등에 대해 설명하고 있습니다.ErrorsResource
사용 시 JSON 파싱 오류를 해결하는 방법이 담겨있습니다. JsonSerializer
에 특정 필드명을 추가하고, 테스트 코드에서 해당 필드명으로 체크하는 방법을 설명하고 있습니다.eventDTO
객체에 objectName
필드가 존재하지 않는 상황일 수 있습니다.produces
에 HAL_JSON_VALUE
를 설정해보시고, 테스트 코드에서 모델 객체를 objectMapper
로 직렬화하여 쿼리에 포함시키는 것을 확인해보세요.현재 에러 메시지와 상황을 종합해보면, JsonPath
를 적절하게 사용하고 있는지, 그리고 미디어 타입 설정이 맞는지 주의깊게 살펴보는 것이 중요합니다. 각 코드를 세밀하게 검토하고 필요한 타입 변환을 확실히 해준다면, 오류를 해결하는 데 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.