是否需要为此Mockito情况编写自定义匹配器?

时间:2010-12-07 20:47:26

标签: java junit mocking mockito

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

我发现这样做的唯一方法是:

// 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);

我尝试了以下操作,但是我收到的消息类似于“无法将Object转换为Foo”......这很有意义:

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

我想知道是否有更简单的方法来执行此操作而无需为每个自定义类创建自定义匹配器?

由于

3 个答案:

答案 0 :(得分:3)

你尝试过isA matcher吗?

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod(isA(Foo.class));

答案 1 :(得分:2)

演员阵容可能就足够了:

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

答案 2 :(得分:1)

如果你想做一些不同于提出异常的事情,还有doAnswer()

doAnswer(new Answer() {
      public Object answer(InvocationOnMock invocation) {
          Object[] args = invocation.getArguments();
          Mock mock = invocation.getMock();
          return null;
      }})
  .when(mock).someMethod();