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失败测试?
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