Mockito vs JMock

Cli*_*sch 6 java junit mocking mockito stubbing

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

首先,在我使用JMock的测试中,存根的验证和返回按以下步骤进行

    contextMockery.checking(new Expectations() {{
        oneOf(dateUtilityService).isBeforeToday(URGENT_DATE);
            will(returnValue(true));
    }});
Run Code Online (Sandbox Code Playgroud)

这实质上验证了该方法是否被调用并同时返回一个固定值.如果未调用isBeforeToday方法并且同时返回我的固定值true,则测试失败.然而,当使用Mockito时,我必须验证该方法是否被调用,然后在单独的步骤中返回我的固定值,这些步骤几乎是重复的,如下所示:

    doReturn(true).when(dateUtilityService).isBeforeToday(URGENT_DATE);
    verify(dateUtilityService).isBeforeToday(URGENT_DATE);
Run Code Online (Sandbox Code Playgroud)

有没有办法一步到位?

其次,如果我忘记在我的期望中列出对我的一个模拟的方法调用,JMock以"意外调用异常"失败测试,​​在我看来这是正确的,而Mockito将很乐意通过测试,除非我明确验证方法调用对于模拟必须永远不会发生,这是正确的(似乎错了)?如果对我的模拟依赖项进行了意外的方法调用,有没有办法告诉mockito失败测试?

Fra*_*man 6

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