JUnitCore停止

cte*_*ekk 2 java testing junit unit-testing junit4

我想停止/销毁一个正在运行的JUnitCore

JUnitCore.run(Request.aClass(ClassToRun));
Run Code Online (Sandbox Code Playgroud)

就像pleaseStop()在RunNotifier上一样.

有任何想法吗?

http://junit.sourceforge.net/javadoc/org/junit/runner/package-summary.html

Yve*_*tin 7

选项1: 最好的选择是编写自己的Runner实现,继承org.junit.runners.BlockJUnit4ClassRunner并在执行上下文中声明它,例如作为原始Java命令行的Main Class.

获得JUnit源代码的启发(它非常小),主要是org.junit.runners.ParentRunnerrunChildren自己覆盖该方法,以便在触发stop命令时有机会退出执行循环.

工厂RunnerRequest.首先,你调用

   (new JUnitCore()).run(Request.runner(new MyStoppableRunner().aClass(ClassToRun))
Run Code Online (Sandbox Code Playgroud)

选项2: 如果在您的上下文中无法使用您自己的运行器(例如在Eclipse中启动),由于RunListener在已使用的运行程序中注册了一个实现,您可以获得对运行测试用例的线程的引用.

如果触发了stop命令,你的监听器可能会抛出一个RuntimeException甚至是一个Error希望它会使原始测试运行器崩溃.

奖金

这两个选项是基本的,因为目的是检查停止条件,而不是继续循环方法或测试类.

如果陷入睡眠或等待状态,您可能想要尝试中断测试线程.为此,应创建看门狗线程,以便在interrupt不活动超时后在测试线程上调用.