我测试了通过 TCP 套接字进行的通信,我希望服务器在我发送特定消息时不会在设定的时间范围内做出响应。
服务器的行为是我无法控制的。
如果测试没有在规定的时间范围内完成,我知道如何让测试不及格。但是我怎么能反其道而行之,让它在时间范围内没有完成呢?
我可以使用 @Test (timeout=1000)
使测试在一秒内未完成时失败。
但是,使用 Junit 4,是否有一个函数可以将预期的超时作为肯定结果进行测试? IE。如果在时间范围内完成,测试将失败,否则将通过?
最佳答案
好问题。实际上,您可以仅使用 junit
工具来完成此操作。我的想法是反转 Timeout
规则行为 + 使用 Test
注释的 expected
属性。唯一的限制是:您必须将测试放在单独的类中,因为 Rule
适用于其中的所有测试:
public class Q37355035 {
private static final int MIN_TIMEOUT = 100;
@Rule
public Timeout timeout = new Timeout(MIN_TIMEOUT) {
public Statement apply(Statement base, Description description) {
return new FailOnTimeout(base, MIN_TIMEOUT) {
@Override
public void evaluate() throws Throwable {
try {
super.evaluate();
throw new TimeoutException();
} catch (Exception e) {}
}
};
}
};
@Test(expected = TimeoutException.class)
public void givesTimeout() throws InterruptedException {
TimeUnit.SECONDS.sleep(1);
}
}
关于java - 预期超时的 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37355035/