Unit testing Mockito验证方法未给出一致的结果

Unit testing Mockito验证方法未给出一致的结果,unit-testing,gwt,mockito,gwtmockito,Unit Testing,Gwt,Mockito,Gwtmockito,我正在学习GwtMockito,但在我的一个测试中无法获得一致的verify()方法结果 我正在尝试测试我的应用程序是否触发了正确的GWT事件。因此,我在@Before方法中模拟了事件总线: eventBus = mock(HandlerManager.class); 该测试按预期通过: // Passes as expected verify(eventBus).fireEvent(any(ErrorOccurredEvent.class)); 我想强迫测试失败,只是为了知道它运行正常。所

我正在学习GwtMockito,但在我的一个测试中无法获得一致的verify()方法结果

我正在尝试测试我的应用程序是否触发了正确的GWT事件。因此,我在@Before方法中模拟了事件总线:

eventBus = mock(HandlerManager.class);
该测试按预期通过:

// Passes as expected
verify(eventBus).fireEvent(any(ErrorOccurredEvent.class));
我想强迫测试失败,只是为了知道它运行正常。所以我把它改成这个,它仍然通过:

// Expected this to fail, but it passes
verify(eventBus).fireEvent(any(ErrorOccurredEvent.class));
verifyZeroInteractions(eventBus).fireEvent(any(ErrorOccurredEvent.class));
这对我来说似乎是矛盾的。因此,我删除了第一个测试:

// Fails as expected
verifyZeroInteractions(eventBus).fireEvent(any(ErrorOccurredEvent.class));
最后,我添加了一个不相关的事件,该事件会导致它失败

// Expected to fail, but passes
verify(eventBus).fireEvent(any(ErrorOccurredEvent.class));
verify(eventBus).fireEvent(any(ModelCreatedEvent.class));  // This event is not used at all by the class that I'm testing. It's not possible for it to be fired.
我找不到任何文件来解释发生了什么。ErrorOccurrentEvent和ModelCreatedEvent都扩展了GwtEvent,并已在手动测试中得到验证。我是否错误地测试了EventBus?如果是这样的话,有什么更好的方法

更新
我做了一些额外的实验。这似乎是我和Mockito matcher之间的问题。当测试失败时,异常将方法签名报告为
eventBus.firevent()
,因此它似乎没有考虑我传递到any方法中的不同类。目前还不确定该怎么办,但请将它包括在这里,供其他研究此问题的人使用。

这并不能解释我第一次尝试强制测试失败的原因,但它确实解释了其他困惑。从Mockito文档中:

公共静态T any(java.lang.Class clazz)

匹配任何对象,包括空值

此方法不使用给定参数进行类型检查,而是 只有这样才能避免在代码中强制转换。然而,这可能会改变 (可以添加类型检查)在未来的主要版本中


所以设计上它不会做我希望的类型检查。我必须想出另一种方法来设计这些测试。但是这也解释了为什么他们没有像我预期的那样工作。

您正在寻找的方法是
isA
,而不是
any