JUnit,参数化测试的超时

时间:2012-01-18 20:16:44

标签: java junit

我已经使用JUnit的参数化测试功能来一次又一次地使用不同的配置运行相同的测试。我的问题是测试的超时时间是单独适用于每次测试还是集体测试。

更具体一点:如果我只用一个参数运行测试并且测试的超时是10分钟,那么如果我再添加两个条目来运行相同的测试,那么测试的超时是否为30分钟?

如果没有,那我该怎么配置呢?

2 个答案:

答案 0 :(得分:4)

我只看了JUnit代码,timeout每次执行parameterized测试方法都会应用{{3}}。每个参数集的运行都是独立的。

答案 1 :(得分:2)

当他说超时适用于每次执行而不是方法时,

jackrabbit是正确的。这只是他/她答案的扩展。使用以下代码作为示例:

@RunWith(Parameterized.class)
public class ParameterWithTimeoutTest {
    @Parameters
    public static Iterable<Object[]> data() {
        return Arrays.asList(new Object[][] {{ 5 }, { 2 }, { 1 }});
    }

    private long input;

    public ParameterWithTimeoutTest(long input) {
        this.input = input;
    }

    @Test(timeout=3000)
    public void testTimeout() throws Exception {
        Thread.sleep(input*1000);
    }
}

testTimeout方法执行三次,分别为参数5,2,1。由于超时,只有第一次执行失败。

如果要在执行类时设置全局超时,可以使用@ClassRule Timeout

public class ParameterWithTimeoutTest {
    @ClassRule
    public static final TestRule globalTimeout = new Timeout(5000);

    @Parameters
    public static Iterable<Object[]> data() {
        return Arrays.asList(new Object[][] {{ 5 }, { 2 }, { 1 }});
    }

    // ...

但是,这会因InteruptedException而失败,而不是超时错误。但至少它超时了。如果需要进行一系列测试,可以在套件上使用它。