Ein*_*ren 11 java testing junit unit-testing
我通过TCP套接字测试通信,我希望服务器在发送特定消息时在设定的时间范围内不响应.
服务器行为是我无法控制的.
我知道如果在一个设定的时间范围内没有完成测试,它将如何失败.但是我怎么能做相反的事情,让它在时间框架内没有完成?
@Test (timeout=1000)
如果不能在一秒钟内完成测试,我可以使用它来进行测试.
但是,使用Junit 4,是否有一个功能来测试预期的超时作为一个积极的结果?即如果在时间范围内完成测试将失败,如果没有则通过测试将失败?
好问题.实际上你只能使用junit
工具来做到这一点.我的想法是反转Timeout
规则行为+使用注释的expected
属性Test
.唯一的限制是:您必须将测试放在单独的类中,因为它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 {
Thread.sleep(1000);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6372 次 |
最近记录: |