인프런 커뮤니티 질문&답변

Youn Gwan Cho님의 프로필 이미지
Youn Gwan Cho

작성한 질문수

입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기

[실습] Thymeleaf - 부트스트랩 템플릿

섹션3 컨트롤러테스트 오류

해결된 질문

작성

·

91

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이 아닌 빈 리스트가 들어오기 때문에

데이터베이스 관련 이슈는 아닌 것 같네요.

 

오타가 없다면 강의 프로젝트 깃허브 리포지토리 참고해주시거나,

 

실습하시는 프로젝트 리포지토리 링크 올려주시면 확인해보겠습니다.

 

감사합니다.

 

 

Youn Gwan Cho님의 프로필 이미지
Youn Gwan Cho
질문자

https://github.com/yg-cho/portfolio-yg
입니다. 감사합니다!

정보근님의 프로필 이미지
정보근
지식공유자

ResumeDTO의 필드가 experience로 선언되어 있네요.

DTO의 필드를 experiences로 바꿔주시거나, 테스트 코드의 optJsonArray 인자를 experience로 바꿔주세요:)

Youn Gwan Cho님의 프로필 이미지
Youn Gwan Cho

작성한 질문수

질문하기