我正在使用Mockito进行集成测试,并且我在发生超时时测试了这个场景。
public boolean checkTimeout(){
if (createdAt.isBefore(dateTimeHelper.getNowUtc().minus(PROCESSING_TIMEOUT_MILLIS))) {
return true;
}
return false;
}
在集成测试中,dateTimeHelper.getNowUtc()
方法被调用10次以上。而且我只想模仿当前调用checkTimeout()
函数的时间,并模拟另一个时间作为存根时间,比如说2015-11-2 15:20:45&# 39;
有谁能告诉我嘲笑这个的正确方法是什么?
蛮力方式
doReturn(new DateTime(2015, 11, 2, 15, 30, 45)).doReturn(new DateTime(2015, 11, 2, 15, 30, 45)).......
.doCallRealMethod().when(dateTimeHelperMock).getNowUtc();
写doReturn()
10次以上,然后doCallRealMethod()
写丑。如果有人触摸代码并添加更多getNowUtc()
,则测试将失败。
我是Mockito的新手,所以想知道在getNowUtc()
checkTimeout()
时是否可以控制模拟
答案 0 :(得分:1)
你可以做这样的事情:
Mockito.when(obj.get()).thenAnswer(new Answer<String>() {
public String answer(InvocationOnMock invocation) throws Throwable
{
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
for (StackTraceElement element : stackTrace)
{
//logic to iterate over stack trace elemtns and find your method.
}
}
});