Spring模拟MVC单元测试与控制器建议

时间:2018-01-22 11:01:41

标签: java spring unit-testing spring-mvc spring-test

我正在尝试测试我的控制器建议异常处理。我已将我的控制器建议注册到我的mockmvc:

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

我可以在控制台中看到测试正在采用异常处理方法:

org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver Detected @ExceptionHandler methods in com.myapp...ExceptionHandlingControllerAdvice

ExceptionHandlingControllerAdvice类有一个安全异常的处理程序方法:

@ExceptionHandler(SecurityException.class)

当我的单元测试抛出SecurityException时,测试失败并带有堆栈跟踪,而不是在控制器通知中调用处理程序方法。

我做错了吗?

2 个答案:

答案 0 :(得分:1)

如果您正在测试@ControllerAdvice,我建议不要使用独立设置,而是加载完整的Spring Context duting测试:

类似的东西:

       mockMvc = MockMvcBuilders
        .webAppContextSetup(context)
        .addFilters(springSecurityFilter)
        .apply(SecurityMockMvcConfigurers.springSecurity())
        .build();

答案 1 :(得分:0)

注释您的Spring模拟MVC测试
@ImportAutoConfiguration(YourControllerAdvice.class)