1

我有以下情况......我想在调用特定方法时抛出异常。我不在乎传递给此方法的内容,我只想调用一个异常。问题是此方法将自定义类作为参数。

我发现这样做的唯一方法是使用以下方法:

// Matches any Foo
TypeSafeMatcher<Foo> fooMatcher = new TypeSafeMatcher<Foo>() {
  @Override
  public Boolean matchesSafely(Foo foo) {
    return true;
  }

  // more overrides
}

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod(fooMatcher);

我尝试执行以下操作,但收到类似于“无法将对象转换为 Foo”的消息......这是有道理的:

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod(anyObject());

我想知道是否有更简单的方法可以做到这一点,而不必为每个自定义类创建自定义匹配器?

谢谢

4

3 回答 3

3

你试过isA匹配器吗?

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod(isA(Foo.class));
于 2010-12-08T02:18:19.423 回答
2

一个演员可能就足够了:

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod((Foo)anyObject());
于 2010-12-07T21:53:55.750 回答
1

如果您想做与引发异常不同的事情,还有 doAnswer()

doAnswer(new Answer() {
      public Object answer(InvocationOnMock invocation) {
          Object[] args = invocation.getArguments();
          Mock mock = invocation.getMock();
          return null;
      }})
  .when(mock).someMethod();
于 2010-12-07T22:11:16.630 回答