【发布时间】:2020-07-03 15:01:42
【问题描述】:
当我创建一个通过调用 API 由代码引发异常的情况时,ExceptionHandler 按预期调用。但是当我尝试通过单元测试创建相同的案例时,ExceptionHandler 没有被调用。我的课程如下:
Controller.java
@Post("/XXX")
public ResponseEntity<List<CategoryTopicBean>> listCategoryTopics(@Body CategoryIdsRequestBean categoryIdsRequestBean) {
if (categoryIdsRequestBean.getCategoryIds().size() > MAX_ALLOWED_CATEGORY_SELECTION) {
throw new CustomException(SystemConstants.ResponseCode.ERROR, SystemConstants.ResponseMessage.OVERFLOW_MAX_CATEGORIES);
}
...
CustomExceptionHandler.java:
@Produces
@Singleton
@Requires(classes = {CustomException.class, ExceptionHandler.class})
public class CustomExceptionHandler implements ExceptionHandler<CustomException, HttpResponse> {
@Override
public HttpResponse handle(HttpRequest request, CustomException exception) {
return HttpResponse.ok(new ResponseEntity<>(exception.responseCode, exception.getMessage()));
}
}
XXXShould.java
@Test
public void should_list_category_topics() {
CategoryIdsRequestBean categoryIdsBean = new CategoryIdsRequestBean();
IdBean idBean = new IdBean();
idBean.setId(ID_1);
categoryIdsBean.setCategoryIds(Arrays.asList(idBean));
ResponseEntity<List<CategoryTopicBean>> responseEntity = topicController.listCategoryTopics(categoryIdsBean);
assertThat(SystemConstants.ResponseCode.SUCCESS).isEqualTo(responseEntity.getResponseCode());
assertThat(1).isEqualTo(responseEntity.getData().size());
categoryIdsBean = new CategoryIdsRequestBean();
categoryIdsBean.setCategoryIds(Arrays.asList(idBean, idBean, idBean, idBean, idBean, idBean));
responseEntity = topicController.listCategoryTopics(categoryIdsBean);
}
任何人都可以看看这个,并帮助我吗?
【问题讨论】:
-
你有没有办法在单元测试期间测试异常处理程序?
-
拜托,你能在你的问题中包括你如何在你的测试中初始化你的主题控制器吗?
-
我个人曾尝试使用@Inject 注入控制器,但如果我这样做,则不会调用异常处理程序。
-
所以,如果我理解正确的话,你是在直接实例化它,不是吗?如果是这样,@GoviS 的答案将是正确的:如果您直接实例化控制器,它只是一个普通的 java 类,没有框架提供的任何附加功能。这正是我问你topicontroller是如何初始化的原因。
标签: java unit-testing exception mockito micronaut