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 に答える