为本地@ExceptionHandler编写JUnit测试

我有以下控制器:

class Controller {

@ResponseStatus(HttpStatus.OK)

@RequestMapping(value = "/verifyCert", method = RequestMethod.GET)

public void verifyCertificate() throws CertificateExpiredException, CertificateNotYetValidException {

certificate.checkValidity();

}

@ResponseStatus(HttpStatus.FORBIDDEN)

@ExceptionHandler({CertificateExpiredException.class, CertificateNotYetValidException.class})

public void handleCertificateValidityException(Exception e) {}

}

我的目标是,如果证书无效,该控制器将重定向到异常处理程序。

回答:

使用standaloneSetup完所有功能后,您将为特定控制器执行设置。

如果您不想配置整个应用程序上下文(用webAppContextSetup代替standaloneSetup),可以通过将代码更改为以下内容来手动设置异常处理程序:

 @Before

public void setup() throws IOException {

MockitoAnnotations.initMocks(this);

mockMvc = MockMvcBuilders.standaloneSetup(controller).setHandlerExceptionResolvers(new ExceptionHandlerExceptionResolver()).build();

}

@Test

public void test() throws Exception {

mockMvc.perform(get("/verifyCert.controller").contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)).andExpect(status().isForbidden());

}

之所以可行,是因为ExceptionHandlerExceptionResolver是Spring

MVC用于基于@ExceptionHandler注释处理异常的类。

检查出一个覆盖一个越来越困难的情况下(使用我的大相关答案@ControllerAdvice上含有类@ExceptionHandler)。

以上是 为本地@ExceptionHandler编写JUnit测试 的全部内容, 来源链接: utcz.com/qa/404930.html

回到顶部