我想停止/销毁正在运行的 JUnitCore,它的启动方式是
JUnitCore.run(Request.aClass(ClassToRun));
Like pleaseStop()
在 RunNotifier 上。
有任何想法吗?
http://junit.sourceforge.net/javadoc/org/junit/runner/package-summary.html http://junit.sourceforge.net/javadoc/org/junit/runner/package-summary.html
选项1:最好的选择是自己编写Runner
实现,继承自org.junit.runners.BlockJUnit4ClassRunner
并在执行上下文中声明它,例如作为原始 Java 命令行的主类。
获得JUnit源码的启发(确实很小),主要是org.junit.runners.ParentRunner http://grepcode.com/file/repo1.maven.org/maven2/junit/junit/4.8.1/org/junit/runners/ParentRunner.java#ParentRunner.runChildren%28org.junit.runner.notification.RunNotifier%29并覆盖runChildren
方法,以便在触发停止命令时有机会退出执行循环。
工厂为Runner
is Request
。首先,您调用
(new JUnitCore()).run(Request.runner(new MyStoppableRunner().aClass(ClassToRun))
选项2:如果在您的上下文中无法使用您自己的运行器(例如在 Eclipse 中启动),那么感谢RunListener
在使用的运行器中注册的实现,您可以获得对运行测试用例的线程的引用。
如果停止命令被触发,你的监听器可能会抛出一个RuntimeException
甚至一个Error
希望它能让原来的测试运行程序崩溃。
Bonus
这两个选项是基本的,因为目的是检查停止条件并且不继续循环方法或测试类。
如果陷入睡眠或等待状态,您可能需要尝试中断测试线程。为此,应创建一个看门狗线程来调用interrupt
在不活动超时后在测试线程上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)