我正在建立安德烈莫尼的伟大答案,如果你喜欢这个,别忘了投票给他的答案!
我使用以下修改来跳过测试,如果它没有在预期的时间范围内完成。这样做的好处是,测试将被标记为 JUnit 跳过,而不是成功。这有利于乐观地执行测试,这些测试有时会挂起或完成得不够快,但您不想将它们标记为失败或删除它们。
public class OptimisticTestClass {
private static final int TEST_METHOD_TIMEOUT_MS = 100;
@Rule
public Timeout timeout = new Timeout(TEST_METHOD_TIMEOUT_MS, TimeUnit.MILLISECONDS) {
public Statement apply(Statement base, Description description) {
return new FailOnTimeout(base, TEST_METHOD_TIMEOUT_MS) {
@Override
public void evaluate() throws Throwable {
try {
super.evaluate();
} catch (TestTimedOutException e) {
Assume.assumeNoException("Test did not finish in the allocated time, skipping!", e);
}
}
};
}
};
// The test times out and is skipped
public void givesTimeout() throws InterruptedException {
Thread.sleep(1000);
}
}