首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mockito对JMock

Mockito对JMock
EN

Stack Overflow用户
提问于 2014-06-24 13:11:19
回答 1查看 6.2K关注 0票数 6

我正在尝试将我的一些单元测试从使用JMock转换为使用Mockito,并且遇到了一些绊脚石。

首先,在我的测试中,当使用JMock时,对存根的验证和返回只需一个步骤,如下所示

代码语言:javascript
复制
    contextMockery.checking(new Expectations() {{
        oneOf(dateUtilityService).isBeforeToday(URGENT_DATE);
            will(returnValue(true));
    }});

这在本质上验证了方法是否正在被调用,并同时返回一个屏蔽值。如果没有调用isBeforeToday方法,并且同时返回我的true罐头值,则测试将失败。然而,在使用Mockito时,我必须验证方法是否被调用,然后以不同的步骤返回我的罐装值,这些步骤几乎是重复的,如下所示:

代码语言:javascript
复制
    doReturn(true).when(dateUtilityService).isBeforeToday(URGENT_DATE);
    verify(dateUtilityService).isBeforeToday(URGENT_DATE);

没有办法一步一步地做这件事吗?

其次,如果我忘记在我的期望值中列出对我的一个模拟的方法调用,JMock用“意外调用异常”(意外调用异常)失败,而在我看来,这是正确的,而Mockito将很高兴地通过测试,除非我明确地验证对模拟的方法调用永远不会发生,这是正确的(似乎是错误的)吗?如果对我模拟的依赖项进行了意外的方法调用,是否有一种方法可以告诉mockito失败测试?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-24 14:52:21

1.

当您存根时,方法调用验证方法通常是不必要的-您应该根据返回值检查操作(在您的示例中,某些事情可能发生,或者在dateUtilityService返回true时会返回某些内容)--检查它,而不是验证与模拟的交互。

Mockito文档也谈到了这一点。http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#2

2.

这实际上导致了脆弱的测试,不推荐用mockito来做事情。这就是为什么我们无法设定这种行为的原因。

请参阅http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#8

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

https://stackoverflow.com/questions/24387558

复制
相关文章

相似问题

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