해결된 질문
작성
·
84
0
안녕하세요. 강의노트와 강의를 보면서 수정해 보았는데 resume에서만 test가 실패합니다. 제가 보기엔 resume가 JSON이 null이라서 그런것 같은데 어느 부분을 봐야할지 모르겠습니다. Datainitiallizer.kt를 봐도 잘 안보이네요.
아래는 에러 메세지와 코드입니다.
java.lang.NullPointerException: Cannot invoke "org.json.JSONArray.length()" because the return value of "org.json.JSONObject.optJSONArray(String)" is null
at com.dogu.portfolio.presentation.controller.PresentationApiControllerTest.testGetResume(PresentationApiControllerTest.kt:66)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
@Test
@DisplayName("resume")
fun testGetResume() {
//given
val uri = "/api/v1/resume"
//when
val mvcResult = performGet(uri)
val contentAsString = mvcResult.response.getContentAsString(StandardCharsets.UTF_8)
val jsonObject = JSONObject(contentAsString)
//then
Assertions.assertThat(jsonObject.optJSONArray("experiences").length()).isPositive()
Assertions.assertThat(jsonObject.optJSONArray("achievements").length()).isPositive()
Assertions.assertThat(jsonObject.optJSONArray("skills").length()).isPositive()
}
답변 1
1
안녕하세요 정보근입니다:)
올려주신 정보로만 봤을 때 제일 가능성이 높은 건 ResumeDTO의 필드의 오타입니다.
각 필드가 experiences, achievements, skills로 정확히 선언되어 있는지 확인해주세요.
데이터 초기화는 확인하신 것 같고,
설령 데이터가 안 들어가있어도 응답값의 각 항목은 null이 아닌 빈 리스트가 들어오기 때문에
데이터베이스 관련 이슈는 아닌 것 같네요.
오타가 없다면 강의 프로젝트 깃허브 리포지토리 참고해주시거나,
실습하시는 프로젝트 리포지토리 링크 올려주시면 확인해보겠습니다.
감사합니다.
ResumeDTO의 필드가 experience로 선언되어 있네요.
DTO의 필드를 experiences로 바꿔주시거나, 테스트 코드의 optJsonArray 인자를 experience로 바꿔주세요:)
https://github.com/yg-cho/portfolio-yg
입니다. 감사합니다!