首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mockito验证方法没有给出一致的结果

Mockito验证方法没有给出一致的结果
EN

Stack Overflow用户
提问于 2015-04-02 18:58:02
回答 2查看 856关注 0票数 1

我正在学习GwtMockito,但是在我的一个测试中很难获得一致的验证()方法结果。

我正在尝试测试我的应用程序正在触发的正确的GwtEvents。因此,我在我的@‘ve方法中像这样模拟了事件总线:

代码语言:javascript
复制
eventBus = mock(HandlerManager.class);

此测试如预期一样通过:

代码语言:javascript
复制
// Passes as expected
verify(eventBus).fireEvent(any(ErrorOccurredEvent.class));

我想强迫测试失败,仅仅是为了知道它是否正确运行。所以我把它改成了这个,它还是通过了:

代码语言:javascript
复制
// Expected this to fail, but it passes
verify(eventBus).fireEvent(any(ErrorOccurredEvent.class));
verifyZeroInteractions(eventBus).fireEvent(any(ErrorOccurredEvent.class));

这在我看来是自相矛盾的。所以我删除了第一个测试:

代码语言:javascript
复制
// Fails as expected
verifyZeroInteractions(eventBus).fireEvent(any(ErrorOccurredEvent.class));

最后,我添加了一个不相关的事件,应该会导致它失败。

代码语言:javascript
复制
// 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>),因此它似乎没有考虑到要传递给任何方法的不同类。目前还不确定该怎么做,但把它包括在这里,供其他研究这个问题的人参考。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-03 06:16:23

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

票数 2
EN

Stack Overflow用户

发布于 2015-04-02 22:18:00

这并不能解释我第一次试图强迫测试失败,但它确实解释了另一种困惑。来自Mockito的文件:

公共静态T(java.lang.Class子句) 匹配任何对象,包括空。 此方法不对给定参数进行类型检查,它只是为了避免在代码中进行强制转换。但是,这可能会在未来的主要版本中更改(可以添加类型检查)。

所以从设计上看,它并不能完成我所期望的类型检查。我得想出另一种方法来设计这些测试。但这解释了为什么他们没有像我预期的那样行事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29420441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档