Does anybody have any tips, or does anybody know how I can test the "error message" returned by the HTTP response object?
@Autowired
private WebApplicationContext ctx;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(ctx).build();
}
Response:
MockHttpServletResponse:
Status = 200
Error message = null
Headers = {Content-Type=[application/json;charset=UTF-8]}
Content type = application/json;charset=UTF-8
MockMVC class is part of Spring MVC test framework which helps in testing the controllers explicitly starting a Servlet container. In this MockMVC tutorial, we will use it along with Spring boot's WebMvcTest class to execute Junit testcases which tests REST controller methods written for Spring boot 2 hateoas example.
What is MockMvc? MockMvc is a Spring Boot test tool class that lets you test controllers without needing to start an HTTP server. In these tests the application context is loaded and you can test the web layer as if i's receiving the requests from the HTTP server without the hustle of actually starting it.
You can use the method status.reason().
For example:
@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 = []
Even simpler:
String error = mockMvc... .andExpect(status().isUnauthorized()) .andReturn().getResolvedException().getMessage(); assertTrue(StringUtils.contains(error, "Bad credentials"));
This is the solution I found using JsonPath and 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 ")));
Hope this helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With