0

私はこのようなインターフェースを持っています

 public interface EventBus{
     public void fireEvent(GwtEvent<?> event);
 }

テストコード(testngメソッド)は次のようになります。

    @Test
    public void testFireEvent(){

          EventBus mock=mock(EventBus.class);

          //when  both Event1 and Event2 are subclasses of GwtEvent<?>
          mock.fireEvent(new Event1());
          mock.fireEvent(new Event2());

          //then
         verify(mock).fireEvent(argThat(new Event2Matcher()));

    }

Event2Matcher は次のようになります。

private class Event2Matcher extends ArgumentMatcher<Event2>
{
  @Override
  public boolean matches(Object arg)
  {
       return ((Event2) arg).getSth==sth;
  }
}

ただし、次のことを示すエラーが発生します。

    Event1 can't be cast to Event2

そして明らかに、マッチャーは最初の呼び出しに一致しました

    mock.fireEvent(new Event1());

したがって、マッチャー内のステートメント

return ((Event2) arg).getSth==sth;

この例外をスローします。問題は、どのように許可するかです

  verify(mock).fireEvent(argThat(new Event2Matcher()));

2番目の呼び出しに一致するには?

4

1 に答える 1