我现在正在编写单元测试.我需要用Mockito模拟长期方法来测试我的实现的超时处理.Mockito可以吗?
像这样的东西:
when(mockedService.doSomething(a, b)).thenReturn(c).after(5000L);
Run Code Online (Sandbox Code Playgroud)
K.L*_*.L. 59
你可以简单地让线程休眠一段时间.注意这一点 - 这样的事情确实会减慢您的自动化测试执行速度,因此您可能希望在单独的套件中隔离这些测试
它看起来与此类似:
when(mock.load("a")).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation){
Thread.sleep(5000);
return "ABCD1234";
}
});
Run Code Online (Sandbox Code Playgroud)
Vis*_*ath 12
从嘲笑2.8.44起,org.mockito.internal.stubbing.answers.AnswersWithDelay可用于此目的。这是一个示例用法
doAnswer( new AnswersWithDelay( 1000, new Returns("some-return-value")) ).when(myMock).myMockMethod();
Run Code Online (Sandbox Code Playgroud)
我为此创建了一个utils:
import java.time.Duration;
import java.util.concurrent.TimeUnit;
import static org.mockito.Mockito.doAnswer;
public class Stubber {
public static org.mockito.stubbing.Stubber doSleep(Duration timeUnit) {
return doAnswer(invocationOnMock -> {
TimeUnit.MILLISECONDS.sleep(timeUnit.toMillis());
return null;
});
}
public static <E> org.mockito.stubbing.Stubber doSleep(Duration timeUnit, E ret) {
return doAnswer(invocationOnMock -> {
TimeUnit.MILLISECONDS.sleep(timeUnit.toMillis());
return ret;
});
}
}
Run Code Online (Sandbox Code Playgroud)
在您的测试用例中只需使用:
doSleep(Duration.ofSeconds(3)).when(mock).method(anyObject());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26595 次 |
最近记录: |