我有一个需要多次调用的方法,我可以在测试用例中返回相同的结果,我调用when
用于循环,但是有更简单的方法可以做到这一点吗?
val ONE_DAY_FORMAT: SimpleDateFormat = SimpleDateFormat("yyyy-MM-dd")
val tempCalendar = Calendar.getInstance()
for (i in (0..15)) {
`when`(accountingDao.sumOfDay(ONE_DAY_FORMAT.format(tempCalendar.time)))
.thenReturn(100.0f)
tempCalendar.add(Calendar.DAY_OF_YEAR, -1)
}
通常,
当设置更复杂时,将使用doAnswer
策略:
Mockito.doAnswer(new Answer<Float>() {
@Override
public Float answer(InvocationOnMock invocation) throws Throwable {
String argument = (String)invocation.getArgument(0);
if(supportedDates.contains(argument)){
return 100.00f;
}else{
return null;
}
}
}).when(accountingDao.sumOfDay(any(String.class)));
因此,您基本上捕获输入参数,然后根据其值决定应该动态返回的内容。
不要模拟相同的方法,而是模拟该方法一次,然后通过传递可选的验证模式参数来调用验证方法。例如,如果您希望模拟类的某个方法被调用两次,则可以像这样创建验证语句
verify(mockedClass, Mockito.times(2)).someMethod();
这将测试someMethod()
是否被调用两次。
移动你的"当..."循环外的语句:
when`(accountingDao.sumOfDay(any()).thenReturn(100.0f)