【发布时间】:2014-08-14 18:29:14
【问题描述】:
我正在尝试将我的一些单元测试从使用 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 测试失败?
【问题讨论】:
-
只是出于好奇,您是否也考虑过将测试转换为 JMockit?语法更接近 jMock 的:
new Expectations() {{ dateUtilityService.isBeforeToday(URGENT_DATE); result = true; }};。
标签: java junit mocking mockito stubbing