java – 我可以在测试运行时跳过JUnit测试吗?

假设我想从我的IDE(Intellij IDEA或eclipse)4000 JUnit测试手动运行;前1000次测试运行非常顺利(比如他们需要3分钟全部1000次),但测试1001单独使用超过30分钟.
有没有办法可以跳过测试1001(当它仍在运行时)并让测试1002(和其他人)继续前进.我不想@Ignore测试1001并重新运行套件,因为我已经有测试1-1000的答案;我也不想选择1001-4000测试,因为它需要太多时间.

我会使用某种按钮 – 跳过电流测试 – 可以在测试运行时按下.

如果不存在此类功能,IDE开发人员或JUnit开发人员需要对其进行增强吗?

最佳答案
您要求的是在测试中期停止执行代码.您不能在代码中没有钩子的情况下停止执行当前测试以允许它.您最好的解决方案是使用其他人建议的类别.

基本上,JUnit执行所有@Before方法(包括@Rules),然后执行@Test方法,然后执行@After方法(同样包括@Rules).即使假设JUnit有一种机制来停止执行它的代码(它没有),大部分时间都花在你的代码上.因此,要“跳过”已经启动的测试,您需要修改测试代码(以及可能正在测试的代码),以便您可以彻底停止它.干净地停止执行线程本身就是一个问题[*].

那么你有什么选择呢?

>并行运行测试,然后您不必等待测试完成.这可能有用,但是并行化测试可能需要做很多工作.
>停止执行测试,并修复您正在进行的测试.大多数IDE都可以选择终止运行测试的JVM.这绝对是最简单的选择.
>实现自己的测试运行器,它在一个单独的线程中运行测试.然后,该测试运行器要么等待线程完成执行,要么在某处检查一个标志,以便它停止.这听起来很复杂,因为您需要管理线程,还要在正在运行的jvm中设置标志.也许在某个地方创建一个文件?这个跑步者将失败当前正在运行的测试,你可以继续下一个.请注意,中途“停止”测试可能会使某些内容处于不一致状态,或者您最终会并行执行某些操作.

那里有并行的JUnit运行器,我认为你不会得到IDE开发人员的帮助(至少在短期内).另外,看看TestNG,它允许并行运行东西.

对于使用类别,我使用的一个解决方案是使用maven surefire或类似方法单独运行长时间运行的测试,而不是通过IDE.这包括在我的机器上的其他地方检查源代码并在那里构建.

[*]:Java, how to stop threads,Regarding stopping of a thread

转载注明原文:java – 我可以在测试运行时跳过JUnit测试吗? - 代码日志