我正在测试一个包含 sleep 的方法。停止调用 sleep() 的方法是什么,因为它会使测试变慢?
public void fun(Integer timeToWait) {
TimeLimiter timeLimiter = new SimpleTimeLimiter();
try {
timeLimiter.callWithTimeout(() -> {
while (true) {
if (avrageIsAboveThanDesired) {
return true;
}
sleep(ofSeconds(REQUEST_STATUS_CHECK_INTERVAL));
}
}, timeToWait, TimeUnit.MINUTES, true);
} catch (UncheckedTimeoutException e) {
logger.error("Timed out waiting Instances to be in Running State", e);
} catch (WingsException e) {
throw e;
} catch (Exception e) {
throw new InvalidRequestException("Error while waiting Instaces to be in Running State", e);
}
}
最佳答案
没有简单的方法可以做到这一点。您有多种选择。
最简单的方法是使 REQUEST_STATUS_CHECK_INTERVAL
可配置,并在测试中将其配置为 0
。它可以是被测试类的属性。
sleep(ofSeconds(getSleepInternval()));
在测试中会调用
testedObject.setSleepInterval(0);
第二个选项是将 sleep 调用提取到它自己的可以模拟的类中。
class Sleeper {
void sleep(long milisecs) {
Thread.sleep(milisecs);
}
}
在你的类里面你会
private Sleeper sleeper = new Sleeper(); //nd it's setter, or dependency injection
在函数中
sleeper.sleep(ofSeconds(REQUEST_STATUS_CHECK_INTERVAL));
这是你可以做的测试
Sleeper mockedSleeper = Mockito.mock(Sleeper.class);
testedObject.setSleeper(mockedSleeper);
关于java - 使用 Junit 测试时如何停止 main 方法调用 sleep() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63315778/