繁体   English   中英

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

[英]How to set timeout at runtime in JUnit Test Case

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

我正在使用Parameterized测试。 在其中,我有一个Scenario列表,其中包含超时值和一些其他字段。 这些Scenario每一个都可能具有不同的2个超时。

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM