Java 在逻辑之前添加Junit setup/@而不更改代码?

Java 在逻辑之前添加Junit setup/@而不更改代码?,java,ant,junit,Java,Ant,Junit,我是否可以按配置在每个测试用例/套件之前添加要运行的代码,而不更改代码? 有没有一种方法可以在一个地方而不是在多个文件中为一个大型测试套件添加设置逻辑 用例:目前有数百个Junit测试失败。一个解决方案就是在所有代码之前运行一段代码(或者至少是JVM启动的次数),执行一些单例初始化。我想避免现在更改数百个文件,只是要求Junit执行给定的init类/方法。(原因:1)最大限度地减少重复2)我们处于某种代码冻结状态-不希望有回购承诺) 我想我可以扩展TestRunner类,并在那里进行初始化——但

我是否可以按配置在每个测试用例/套件之前添加要运行的代码,而不更改代码? 有没有一种方法可以在一个地方而不是在多个文件中为一个大型测试套件添加设置逻辑

用例:目前有数百个Junit测试失败。一个解决方案就是在所有代码之前运行一段代码(或者至少是JVM启动的次数),执行一些单例初始化。我想避免现在更改数百个文件,只是要求Junit执行给定的init类/方法。(原因:1)最大限度地减少重复2)我们处于某种代码冻结状态-不希望有回购承诺)


我想我可以扩展TestRunner类,并在那里进行初始化——但也许有更好的方法。顺便说一句,该套件是通过Ant运行的,我也看不到通过我自己的testrunner的方法。

我有点困惑,因为您说您不想更改代码,但编写自定义测试runner似乎还可以。这不意味着改变测试代码吗

如果您可以更改测试代码,但不能更改源代码,那么解决此问题的最简单方法是将init方法添加到您的测试套件类(如果有)中,并使用
@BeforeClass

public class MySuite{

    @BeforeClass
    public static void initSingleton(){
            //...
    }
}

此方法将在运行套件中的任何测试类之前运行一次,因此您不应该有太多的代码重复,如果您总是运行所有测试,甚至可以将其添加到根套件中。

扩展测试运行程序可能不是最好的方法,但可能是最简单的方法。理想情况下,您希望在每个测试中对一个方法使用
@BeforeClass
注释,但正如您所说,更改数百个文件可能会降低此选项的吸引力。那么好的旧“搜索和替换”选项呢?使用一些聪明的regexp,您可能可以将安装方法插入到所有测试用例中。谢谢@RyanJ-关于如何使用ant脚本中的自定义测试运行程序有何想法?@isnot2bad-是的,我可以使用regex自动添加样板代码。。但我想避免它,尤其是我们正处于代码冻结期。。(Q更新)根据您所处的情况,您可以尝试使用“org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatter”。名称是formatter,但您可以侦听事件,例如suite started、test started和执行一些常见的内容(您所想到的)。谢谢。还没有测试套件类-我不需要在其中一个中列出所有(相关)测试吗?所谓“代码”更改,我指的是对存储库中的源代码/测试的提交(任何新的提交都会触发一个大型CI管道,其中包含一系列我希望避免的事件)。工具(如junit runner)只需重新运行测试即可更改。