如何在@ControllerAdvice中测试异常处理

问题描述 投票:0回答:1

我目前在我的应用程序中有两个ControllerAdvice,我应该将它们合并为一个。但是我需要在合并前后测试它们,测试异常和控制器返回我的对象​​。

我正在尝试使用Mockito进行jUnit测试,但似乎不可能在没有任何上下文,没有控制器等的情况下测试异常...

有人知道我该如何继续实现我想做的事情?

我也尝试手动抛出一个异常,但显然它没有被ControllerAdvice捕获。

所以基本上这就是我想要做的:手动引发异常此异常由我的ControllerAdvice处理检查返回的对象(代码和消息)

这里是我的代码示例:

@Before
public void setup() {
  ...
    mockMvc = MockMvcBuilders.standaloneSetup(getController())
                .setControllerAdvice(new GlobalControllerExceptionHandler())
                .setCustomArgumentResolvers(resolver, resolver_0, resolver_1)
                .setHandlerExceptionResolvers(exceptionResolver).build();
}


@Controller
@RequestMapping("/tests")
public static class RestProcessingExceptionThrowingController {

    @RequestMapping(value = "/exception", method = GET)
    public @ResponseBody String find() {
        throw new EntityNotFoundException();
    }
}

@Test
public void testHandleException() throws Exception {
    mockMvc.perform(get("/tests/exception"))
            .andExpect(new ResultMatcher() {


                @Override
                public void match(MvcResult result) throws Exception {
                    result.getResponse().getContentAsString().contains("global_error_test");
                }
            })
            .andExpect(status().isNotFound());
}

我在结尾处具有良好的状态代码,但是它不使用我的ControllerAdvice(我尝试使用调试器)

spring mockito mockmvc controller-advice
1个回答
1
投票

您可以直接调用处理程序方法

@ControllerAdvice

MyAdvice{

    @ExceptionHandeler(listOfExxcetpions)
    public ResponseEntity someOfMyExceptionsHandler(Exception e){
       .....
     }  

}

并且正在测试中

MuTest{
private MyAdvice advice=new MyAdvice();

@Test
public void oneOfTests(){
    Exception e=new SomeSortOfExceptionToTest();
    resp=advice.someOfMyExceptionsHandler(e)
    assertThat(resp).....dostuff;
}

}

如果要测试spring与处理程序的集成方式-如果批注正确,对序列化进行排序等-那么这将是一个集成测试,并且必须启动测试上下文-那么您可以直接从控制器方法抛出异常。

© www.soinside.com 2019 - 2024. All rights reserved.