我正在尝试将我的一些单元测试从使用JMock转换为使用Mockito并且遇到了一些绊脚石 .
首先,在我使用JMock的测试中,存根的验证和返回按如下步骤进行
contextMockery.checking(new Expectations() {{
oneOf(dateUtilityService).isBeforeToday(URGENT_DATE);
will(returnValue(true));
}});
这基本上验证了该方法是否被调用并同时返回一个固定值 . 如果未调用isBeforeToday方法并且同时返回我的固定值true,则测试失败 . 然而,当使用Mockito时,我必须验证该方法是否被调用,然后在单独的步骤中返回我的预设值,这些步骤几乎是重复的,如下所示:
doReturn(true).when(dateUtilityService).isBeforeToday(URGENT_DATE);
verify(dateUtilityService).isBeforeToday(URGENT_DATE);
有没有办法一步到位?
其次,如果我忘记按照我的期望列出对我的一个模拟的方法调用,JMock在“意外的调用异常”中未通过测试,我认为这是正确的,而Mockito将很乐意通过测试,除非我明确验证方法调用对于模拟必须永远不会发生,这是正确的(似乎错了)?有没有办法告诉mockito如果对我的模拟依赖项进行了意外的方法调用而导致测试失败?
1 回答
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