使用 Junit 测试时如何停止调用 sleep() 方法的主要方法?
How to stop main method calling sleep() method, when testing it with Junit?
我正在测试一个包含 sleep in side 的方法 it.What 是停止调用 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
。它可以是测试的 class.
的 属性
sleep(ofSeconds(getSleepInternval()));
在测试中会调用
testedObject.setSleepInterval(0);
第二个选项是将 sleep 调用提取到它自己的可以被模拟的 class 中。
class Sleeper {
void sleep(long milisecs) {
Thread.sleep(milisecs);
}
}
在你的class中你会
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);
我正在测试一个包含 sleep in side 的方法 it.What 是停止调用 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
。它可以是测试的 class.
sleep(ofSeconds(getSleepInternval()));
在测试中会调用
testedObject.setSleepInterval(0);
第二个选项是将 sleep 调用提取到它自己的可以被模拟的 class 中。
class Sleeper {
void sleep(long milisecs) {
Thread.sleep(milisecs);
}
}
在你的class中你会
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);