全局设置JUnit runner而不是@RunWith

全局设置JUnit runner而不是@RunWith,junit,junit-runner,Junit,Junit Runner,在不查看JUnit源代码本身的情况下(我的下一步),是否有一种简单的方法可以设置每个测试使用的默认运行程序,而不必在每个测试上设置@RunWith?我们有大量的单元测试,我希望能够在不必更改每个文件的情况下全面添加一些支持 理想情况下,我希望得到这样的东西:-Djunit.runner=“com.example.foo”。JUnit不支持全局设置runner。您可以在基类中隐藏@RunWith,但这可能对您的情况没有帮助。根据您想要实现的目标,您可能可以通过使用自定义的RunListener来全

在不查看JUnit源代码本身的情况下(我的下一步),是否有一种简单的方法可以设置每个测试使用的默认运行程序,而不必在每个测试上设置@RunWith?我们有大量的单元测试,我希望能够在不必更改每个文件的情况下全面添加一些支持


理想情况下,我希望得到这样的东西:-Djunit.runner=“com.example.foo”。

JUnit不支持全局设置runner。您可以在基类中隐藏@RunWith,但这可能对您的情况没有帮助。

根据您想要实现的目标,您可能可以通过使用自定义的
RunListener来全局影响测试行为。下面是如何使用Maven Surefire插件配置它:

我认为这不可能全局定义,但是如果可以选择编写自己的主函数,那么可以通过代码执行类似的操作。您可以创建自定义的
RunnerBuilder
,并将其与测试类一起传递给
套件

Class[]testClasses={TestFoo.Class,TestBar.Class,…};
RunnerBuilder RunnerBuilder=新RunnerBuilder(){
@凌驾
公共运行程序runnerForClass(类testClass)抛出可丢弃的{
返回新的MyCustomRunner(testClass);
}
};
新的JUnitCore().run(新的套件(runnerBuilder,testClasses));

这不会与Eclipse中的UI测试运行程序集成,但对于某些自动化测试场景,它可能是一个选项。

因此我查看了处理RunWith注释的代码,没有看到任何可以从其他地方提取默认运行程序的内容。