如何在没有实际控制器调用的情况下使用mockito测试异常处理程序(Spring)

ymdaylpp  于 2022-11-08  发布在  Spring
关注(0)|答案(1)|浏览(117)

我有一个控制器

@RequestMapping(value = "something/{year}", method = RequestMethod.GET)
@ResponseBody
public MyObject get(@PathVariable("year") int year throws MyException {
    return myService.get(year);
}

如果年份不正确,它将抛出一个错误,这个错误将被ErrorInterceptor类捕获

@ExceptionHandler(value = {MyException.class})
protected ResponseEntity<Object> handleMyException(MyException ex, WebRequest request) {
    System.out.println(ex.getMessage());
    ResponseEntity<Object> res = handleExceptionInternal(ex, ex.getMessage(), new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request);
    ResponseEntity<Object> response = getMyResponse((ServletWebRequest) request, res);
    return response;
}

方法getMyResponse创建了一个带有自定义错误信息(路径、代码错误等)的对象。我的问题是如何在不真正调用控制器的情况下使用Mockito测试它。我已经使用MockMvcBuilders.standaloneSetup(controller).setControllerAdvice(myInterceptor).build()进行了测试,但它总是为null(我不想真正调用)。
我也试过添加Mockito.when和Mockity.verify来伪造呼叫,但我无法获得检索路径和东西...

6xfqseft

6xfqseft1#

如果你只是想知道拦截器是否返回了正确的响应,你可以创建一个类来扩展拦截器,并为handleMyException提供一个公共的 Package 方法,然后示例化这个新类,调用 Package 器并Assert返回的响应。

相关问题