私はこのようなインターフェースを持っています
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番目の呼び出しに一致するには?