1. ホーム

[解決済み】mockMvcでレスポンスボディの文字列をチェックする方法

2022-03-27 20:21:41

質問

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

@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()でいろいろやってみたけど、うまくいかなかった。

どうすればいいですか?

Sotirios Delimanolis の回答はその通りなのですが、私はこの mockMvc のアサーションで文字列を比較することを探していました。

ということで、以下の通りです。

.andExpect(content().string("\"Username already taken - please try with different username\""));

もちろん、私のアサーションは失敗です。

java.lang.AssertionError: Response content expected:
<"Username already taken - please try with different username"> but was:<"Something gone wrong">

というのも

  MockHttpServletResponse:
            Body = "Something gone wrong"

というわけで、これがうまくいった証拠です