mockMvc でレスポンス本文の文字列をチェックする方法 質問する

mockMvc でレスポンス本文の文字列をチェックする方法 質問する

簡単な統合テストがあります

@Test
public void shouldReturnErrorMessageToAdminWhenCreatingUserWithUsedUserName() throws Exception {
    mockMvc.perform(post("/api/users").header("Authorization", base64ForTestUser).contentType(MediaType.APPLICATION_JSON)
        .content("{\"userName\":\"testUserDetails\",\"firstName\":\"xxx\",\"lastName\":\"xxx\",\"password\":\"xxx\"}"))
        .andDo(print())
        .andExpect(status().isBadRequest())
        .andExpect(?);
}

最後の行では、レスポンス本文で受信した文字列を期待される文字列と比較したい

そして、私は次のように返答しました:

MockHttpServletResponse:
          Status = 400
   Error message = null
         Headers = {Content-Type=[application/json]}
    Content type = application/json
            Body = "Username already taken"
   Forwarded URL = null
  Redirected URL = null

content()、body() でいくつかのトリックを試しましたが、何も機能しませんでした。

ベストアンサー1

電話をかけることができますandReturn()返されたMvcResultオブジェクトを使用してコンテンツを として取得しますString

以下を参照してください:

MvcResult result = mockMvc.perform(post("/api/users").header("Authorization", base64ForTestUser).contentType(MediaType.APPLICATION_JSON)
            .content("{\"userName\":\"testUserDetails\",\"firstName\":\"xxx\",\"lastName\":\"xxx\",\"password\":\"xxx\"}"))
            .andDo(MockMvcResultHandlers.print())
            .andExpect(status().isBadRequest())
            .andReturn();

String content = result.getResponse().getContentAsString();
// do what you will 

おすすめ記事