2013-03-07 124 views
3

我想测试一段时间,比如说5秒,然后通过测试,如果没有错误已被声明。这可能与注释?可以使用类似@Test(uptime=5000)的东西吗?运行junit测试一定的时间

回答

7

问题被编辑修订后回答

从根本上说,感觉就像你在这里测试了错误的东西 - 它看起来非常奇怪的“没有发生”是成功的标志。

如果你想证明你的算法可以在一定的时间内运行不会失败,我真的提取出一个周期,然后写的类似测试:

@Test 
public void fineForFiveSeconds() { 
    long start = System.nanoTime(); 
    long end = start + TimeUnit.SECONDS.toNanos(5); 
    while (System.nanoTime < end()) { 
     test.executeOneIteration(); 
    } 
} 

这样你没有一个单独的线程具有杀死工作代码等

原来的答复

这个答案写之前这个问题表明,超时是成功的标志,而不是失败。

我觉得你只是想在@Test注释的timeout属性:

@Test(timeout = 5000) 

与文档:

可选择指定以毫秒为单位的超时导致测试方法失败,如果它需要长于那个毫秒数。

+0

只是为了澄清,这只是测试失败,测试方法运行的线程仍在运行,直到JVM停止。 – 2013-03-07 18:22:13

+0

我没有很好地解释我自己。我想跑一段时间,如果什么都没有发生,那就通过测试。 – dinigo 2013-03-08 03:19:55

+1

@ demil133:这是一个非常奇怪的要求 - 与我通常所期望的完全相反。通常情况下,代码不及时完成是*失败*的标志,不成功。你真的想要'while(true){}'的实现成功吗? – 2013-03-08 03:24:16