MockMVC如何在同一个测试用例中测试异常和响应代码

新手上路,请多包涵

我想断言引发异常并且服务器返回 500 内部服务器错误。

为了突出意图,提供了一个代码片段:

 thrown.expect(NestedServletException.class);
this.mockMvc.perform(post("/account")
            .contentType(MediaType.APPLICATION_JSON)
            .content(requestString))
            .andExpect(status().isInternalServerError());

当然,我写 isInternalServerErrorisOk 。无论是否在 throw.except 语句下方抛出异常,测试都会通过。

你将如何解决这个问题?

原文由 Farmor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

如果您有 异常处理程序 并且想要测试特定异常,您还可以断言该实例在已解决的异常中有效。

 .andExpect(result -> assertTrue(result.getResolvedException() instanceof WhateverException))

更新(gavenkoa)不要忘记注入 @ExceptionHandler 注释的测试上下文方法或异常将发生在 .perform() 而不是用 .andExpect() 注册,基本上注册:

 @ControllerAdvice
public class MyExceptionHandlers {
    @ExceptionHandler(BindException.class)
    public ResponseEntity<?> handle(BindException ex) { ... }
}

使用 @Import(value=...)@ContextConfiguration(classes=...) 或通过其他方式。

原文由 Oluwatobiloba 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题