使用AutoConfigureMockMvc和CompletableFuture测试ControllerAdvice

时间:2019-05-16 11:55:46

标签: spring-boot spring-mvc spring-test completable-future

我添加了一个REST控制器,该控制器使用ControllerAdvice将CompletableFutures返回到项目中,以将异常转换为错误DTO。

我的控制器不会抛出异常,而是将异常包装到失败的CompletableFutures中并返回。

运行完整的应用程序并进行手动测试时,它可以按预期工作,但是在我的测试中,mockMvc不会触发建议,并且始终返回HTTP 2xx。

知道为什么吗?

2 个答案:

答案 0 :(得分:0)

如果您具有MockMvc的独立设置,则需要在创建模拟Mvc实例时指定要使用的控制器建议(如果有),如下所示:

MockMvc mockMvc = MockMvcBuilders.standaloneSetup(controller)
            .setControllerAdvice(new YourControllerAdvice())
            .build();

这样做的原因是,您在这里没有spring的上下文来检测控制器建议。

答案 1 :(得分:0)

我发现我的测试不正确(或者换句话说。.测试框架的设计不符合我的预期;)

当测试控制器返回CompletableFutures时,需要像下面那样使用asyncDyspatch

https://github.com/spring-projects/spring-framework/blob/master/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/AsyncTests.java