2016-10-13 2 views
0

私が書いたSpringBootマイクロサービスに統合テストを書いています。ネストされたJSON配列要素にアサーションを実装すると、問題が発生しました。一例として、私の応答ペイロードは以下の通りです。SpringBoot統合テストRest AssuredとHamcrestを使用してネストされた配列要素をアサートする

{ 
    "sessionQuestions": [ 
    { 
     "id": 2, 
     "sessionId": 1, 
     "questionId": "1002", 
     "rounds": [ 
     { 
      "id": 2, 
      "sessionQuestionId": 2 
     } 
     ], 
     "status": "DELIVER" 
    }, 
    { 
     "id": 1, 
     "sessionId": 1, 
     "questionId": "1004", 
     "rounds": [ 
     { 
      "id": 1, 
      "sessionQuestionId": 1 
     } 
     ], 
     "status": "DELIVER" 
    } 
    ] 
} 

ここで、idとsessionQuestionIdの値のネストされたラウンド配列をアサートしたいとします。しかし、私は何回か検索した後、これを行う方法を見つけることができませんでした。誰もこれを行う方法を知っていますか?どんな助けもありがとうございます。

私のアサーションはこのようになります。

@Test 
    public void testGetLatestSession() { 
     given().when().get(SESSIONS_RESOURCE).then().statusCode(HttpStatus.SC_OK) 
       .body("id", is((int) sessionTwo.getId())).body("status", is(SessionStatus.STARTED.name())) 
       .body("sessionQuestions.findall.size()", equalTo(2)) 
       .body("sessionQuestions.id", 
         hasItems((int) sessionQuestionOne.getId(), (int) sessionQuestionTwo.getId())) 
       .body("sessionQuestions.sessionId", hasItems((int) sessionTwo.getId(), (int) sessionTwo.getId())) 
       .body("sessionQuestions.questionId", hasItems("1002", "1004")) 
       .body("sessionQuestions.status", 
         hasItems(SessionQuestionStatus.DELIVER.name(), SessionQuestionStatus.DELIVER.name())) 
       .body("sessionQuestions.rounds.findall.size()", equalTo(2)) 
       .body("sessionQuestions.rounds.id", hasItems((int) roundOne.getId(), (int) roundTwo.getId())) 
       .body("sessionQuestions.rounds.sessionQuestionId", hasItems((int)sessionQuestionOne.getId(), (int) sessionQuestionTwo.getId())); 
    } 

最後の2行のアサーションが失敗しています。

答えて

0

hasItems()メソッドのパラメータの場合、型キャストを「int」に取り除き、Stringにします。

パスはsessionQuestions [0]。arounds.sessionQuestionIdと同じにする必要があります。

関連する問題