java - 预期超时的 JUnit 测试

标签 java unit-testing testing junit

我测试了通过 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/

相关文章:

java - Oracle java存储过程性能

java - 需要一个正则表达式来验证 java 字符串

java - Mockito Matchers isA、any、eq 和 same 有什么区别?

python - assertRaisesRegexp 确实可以在 Python2 中使用 unicode

django - 跳过 Django 测试数据库创建以获取只读、外部管理、高安全性、大型数据库

java - Hadoop YARN 上的 JMH 基准测试

java - 如何在 Spark Streaming 中抛出异常

c++ - 如何预期 static_assert 失败并使用 Boost.Test 框架处理它?

spring - 如何在 Spek 测试中使用依赖注入(inject)

testing - Laravel 4 - 单元测试