我有一个测试JUnit Suite,它通过Suite Annotations运行一组测试类。我需要在循环上运行Suite,直到经过了规定的时间(我从配置或自定义持续时间注释获得这段时间)。测试本身使用JUnitParams来提供数据。如何在完成套件后立即重新运行套件?
我最初的尝试是创建一个自定义运行器,它扩展了JUnit Suite运行器:
@RunWith(Suite.class)
@Suite.SuiteClasses({Suite1.class,Suite2.class})
public class RepeatingSuite extends Suite {
// Other stuff...
@Override
public void run(RunNotifier notifier){
/* hasDurationElapsed is a simple method
* comparing current time vs the start time
* which is set in the constructor */
while (!hasDurationElapsed()) {
super.run(notifier);
}
}
}
这成功在循环上运行测试,但由于某些原因它似乎与JUnitParams冲突,因为我的测试使用@FileParameters
注释,并且在循环中套件的第一次迭代后参数始终为null 。因此我假设它不会在csv数据文件的开头为套件的每次迭代重新启动,但实际上只是从它停止的地方继续(尽管我不确定这实际上是怎么可能的......)
有没有比创建自定义测试运行器更简单的方法来实现这一目标?或者我在测试跑步者中犯了一个明显的错误?我使用过的方法似乎原则上有效,但它与JUnit Params并不相称。
我意识到这可以通过外部脚本轻松完成,但不幸的是我必须在"测试框架内完成#34;。