【问题标题】:Is it required to write custom matchers for this Mockito situation?是否需要为这种 Mockito 情况编写自定义匹配器?
【发布时间】:2010-12-07 20:47:25
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: java junit mocking mockito


    【解决方案1】:

    你尝试过 isA 匹配器吗?

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

    【讨论】:

      【解决方案2】:

      一个演员表就足够了:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-20
          • 1970-01-01
          相关资源
          最近更新 更多