java - 如何在 JUnit 测试用例中设置运行时超时

标签 java junit

我使用 JUnit v4 作为测试框架。我想知道如何在测试用例中设置运行时超时?

我正在使用参数化测试,其中我有一个场景列表,其中包含超时值和一些其他字段。每个场景可能有不同的超时。

timeout 参数并不能帮助我实现这一目标。

@Test(timeout = getTimeOut())
public void secureLoginWithLongUsername() {
    // Test case goes here

}

private final long getTimeOut() {
    // I am doing some processing here to calculate timeOut dynamically
    long timeOut = scenario.getTimeOut();
    return timeOut;
}

@Parameters
public static Collection<Scenario[]> getParameters() {

    List<Scenario[]> scenarioList = new ArrayList<Scenario[]>();
    Configuration config = new Configuration();
    List<Scenario> scenarios = config.getScenarios();
    for (Scenario scenario : scenarios) {
        scenarioList.add(new Scenario[] { scenario });
    }

    return scenarioList;
}

public class Configuration {
    private List<Scenario>   scenarios;
    //Some processing here
    public List<Scenario> getScenarios() {
        return scenarios;
    }
}

public class Scenario {
    private long   timeOut;
    private String   name;
    //Some more fields here
}

请帮助我找到动态设置超时的替代方案。

最佳答案

我认为,你需要自己构建它,例如:

private Timer timer;

@After
public void terminateTimeout() {
    if (timer != null) {
        timer.cancel();
        timer = null;
    }
}

@Test
public void testTimeout() throws Exception {
    setTimeout(1000);
    // run test...
}

private void setTimeout(int duration) {
    final Thread currentThread = Thread.currentThread();
    timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            currentThread.interrupt();
        }
    }, duration);
}

关于java - 如何在 JUnit 测试用例中设置运行时超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21329288/

相关文章:

java - Spring Boot REST 应用测试方法

java - 排序数组的直方图

java - 在 MyBatis Java 中记录最终的 MySQL 查询,以便之后在不同的服务器上手动执行它

java - 使用角色JAVA访问时Spring Security 403错误

java - 为什么 guava/java 使用 possible.isPresent() 而不是Optional.isPresent(possible)?

UserDaoImpl 处的 java.lang.ExceptionInInitializerError。<clinit>(UserDaoImpl.java :71)

java - 有人可以解释一下processing/java中的conf是什么以及它的用途是什么吗?

android - 带延迟的单元测试方法

java - 替换测试中的静态变量

JUnit - 如果超时如何使测试用例通过?