我正在学习GwtMockito,但是在我的一个测试中很难获得一致的验证()方法结果。
我正在尝试测试我的应用程序正在触发的正确的GwtEvents。因此,我在我的@‘ve方法中像这样模拟了事件总线:
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.我找不到任何文件来解释发生了什么。ErrorOccurredEvent和ModelCreatedEvent都扩展了GwtEvent,并且已经在手工测试中得到了验证。我的EventBus测试不正确吗?如果是这样的话,有什么更好的方法来解决这个问题呢?
更新
我做了一些额外的实验。这似乎是我和Mockito对手之间的一个问题。当测试失败时,异常将方法签名报告为eventBus.fireEvent(<any>),因此它似乎没有考虑到要传递给任何方法的不同类。目前还不确定该怎么做,但把它包括在这里,供其他研究这个问题的人参考。
发布于 2015-04-03 06:16:23
您要寻找的方法是isA,而不是any。
发布于 2015-04-02 22:18:00
这并不能解释我第一次试图强迫测试失败,但它确实解释了另一种困惑。来自Mockito的文件:
公共静态T(java.lang.Class子句) 匹配任何对象,包括空。 此方法不对给定参数进行类型检查,它只是为了避免在代码中进行强制转换。但是,这可能会在未来的主要版本中更改(可以添加类型检查)。
所以从设计上看,它并不能完成我所期望的类型检查。我得想出另一种方法来设计这些测试。但这解释了为什么他们没有像我预期的那样行事。
https://stackoverflow.com/questions/29420441
复制相似问题