如何使用mockito多次模拟相同的方法



我有一个需要多次调用的方法,我可以在测试用例中返回相同的结果,我调用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)

相关内容

  • 没有找到相关文章

最新更新