Search code examples
javaspringmockingspring-test-mvc

How to check String in response body with mockMvc


I have simple integration test

@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(?);
}

In last line I want to compare string received in response body to expected string

And in response I get:

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

Tried some tricks with content(), body() but nothing worked.


Solution

  • @Sotirios Delimanolis answer do the job however I was looking for comparing strings within this mockMvc assertion

    So here it is

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

    Of course my assertion fail:

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

    because:

      MockHttpServletResponse:
                Body = "Something gone wrong"
    

    So this is proof that it works!