web-dev-qa-db-ja.com

mockMvc-テストエラーメッセージ

誰かが何かヒントがありますか、それともHTTP応答オブジェクトによって返された「エラーメッセージ」をテストする方法を誰かが知っていますか?

@Autowired
private WebApplicationContext ctx;

private MockMvc mockMvc;

@Before
public void setUp() throws Exception {
    mockMvc = MockMvcBuilders.webAppContextSetup(ctx).build();
}

応答:

MockHttpServletResponse:
              Status = 200
       Error message = null
             Headers = {Content-Type=[application/json;charset=UTF-8]}
        Content type = application/json;charset=UTF-8
19
Vinchenzo

メソッド status.reason() を使用できます。

例えば:

     @Test
     public void loginWithBadCredentials() {
        this.mockMvc.perform(
                post("/rest/login")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content("{\"username\": \"baduser\", \"password\": \"invalidPassword\"}")
                )
                .andDo(MockMvcResultHandlers.print())
                .andExpect(status().isUnauthorized())
                .andExpect(status().reason(containsString("Bad credentials")))
                .andExpect(unauthenticated());
    }


    MockHttpServletResponse:
                  Status = 401
           Error message = Authentication Failed: Bad credentials
            Content type = null
                    Body = 
           Forwarded URL = null
          Redirected URL = null
                 Cookies = []
28

これは、JsonPathとMockMvcを使用して見つけたソリューションです

this.mvc.perform(post(BASE_URL).contentType(MediaType.APPLICATION_JSON).content(responseJson)).andDo(print())
.andExpect(status().is5xxServerError())
.andExpect(jsonPath("$.message", is("There is an error while executing this test request ")));

お役に立てれば。

2
Akshay Shinde

さらにシンプル:

String error =  mockMvc...
    .andExpect(status().isUnauthorized())
    .andReturn().getResolvedException().getMessage();

assertTrue(StringUtils.contains(error, "Bad credentials"));
0
membersound