首页 > 解决方案 > 模拟java异常

问题描述

我有这个 catch 语句:

catch (NotFoundException ex) {
      ex.getError().setTitle(NOT_FOUND);
      throw new NotFoundException(resource, id, ex.getError());
}

我怎样才能模拟这个异常?我试过这个

    when(service
        .filter(eq(any()), eq(any()), eq(any())))
        .thenThrow(new NotFoundException(anyString(), anyString()));`

但由于这一行,它给了我一个空异常错误:

ex.getError().setTitle(NOT_FOUND);

构造函数是:

  public NotFoundException(String resource, String id, Error error) {
    this.resource = resource;
    this.ids = Collections.singletonList(id);
    this.error = error;
  }

而且我无法获取异常变量来设置标题,也无法找到模拟它的方法。

谢谢你的帮助!

标签: javajunitmockingmockito

解决方案


.thenThrow(new NotFoundException(anyString(), anyString()));

这是不允许anyString()的:只代表直接调用whenand verify。在您对过滤器的调用中,只需使用any()而不是eq(any()),但您在正确的位置使用匹配器。

此外,看起来您的被测系统假定它ex.getError()是非空的;您可能需要将有用的 Error 实例作为构造函数参数传递到您创建的 NotFoundException 中。

.thenThrow(new NotFoundException("foo", "bar", new Error(/* ... */)))

当然,如果您的 Error 难以创建或使用,您可以使用 amock(Error.class)来代替。


推荐阅读