我使用JUnit v4
作为测试框架。我想知道如何在Test Case中设置运行时超时?
我正在使用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
}
请帮我详细说明动态设置超时的任何替代方法。
答案 0 :(得分:1)
我认为,您需要自己构建它,例如:
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);
}