使用 AutoConfigureMockMvc 和 CompletableFuture 测试 ControllerAdvice
Testing ControllerAdvice with AutoConfigureMockMvc and CompletableFuture
我已经添加了一个 REST 控制器 returning CompletableFutures 到一个项目,使用 ControllerAdvice 将异常转换为错误 DTO。
我的控制器不会抛出异常,将它们包装到失败的 CompletableFutures 中并 returning 这些。
当 运行 完整的应用程序和手动测试按预期工作时,但在我的测试中,mockMvc 不会触发建议并且始终 return HTTP 2xx。
知道为什么吗?
如果您有 MockMvc
的独立设置,则需要在创建 mockMvc 实例时指定要使用的控制器建议(如果有的话),如下所示:
MockMvc mockMvc = MockMvcBuilders.standaloneSetup(controller)
.setControllerAdvice(new YourControllerAdvice())
.build();
这是因为您没有此处的上下文 spring 来检测控制器建议。
我发现我的测试不正确(或者,换句话说..测试框架的设计不符合我的预期;)
当测试返回 CompletableFutures 的控制器时,需要使用 asyncDyspatch,如
我已经添加了一个 REST 控制器 returning CompletableFutures 到一个项目,使用 ControllerAdvice 将异常转换为错误 DTO。
我的控制器不会抛出异常,将它们包装到失败的 CompletableFutures 中并 returning 这些。
当 运行 完整的应用程序和手动测试按预期工作时,但在我的测试中,mockMvc 不会触发建议并且始终 return HTTP 2xx。
知道为什么吗?
如果您有 MockMvc
的独立设置,则需要在创建 mockMvc 实例时指定要使用的控制器建议(如果有的话),如下所示:
MockMvc mockMvc = MockMvcBuilders.standaloneSetup(controller)
.setControllerAdvice(new YourControllerAdvice())
.build();
这是因为您没有此处的上下文 spring 来检测控制器建议。
我发现我的测试不正确(或者,换句话说..测试框架的设计不符合我的预期;)
当测试返回 CompletableFutures 的控制器时,需要使用 asyncDyspatch,如