【问题标题】:adding Junit setup/@Before logic without changing code?添加 Junit setup/@Before 逻辑而不更改代码?
【发布时间】:2015-03-15 01:30:24
【问题描述】:

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

用例:目前有数百个 Junit 测试失败。一个解决方案是简单地在所有这些之前运行一段代码(或者至少与 JVM 启动一样多次),来做一些单例初始化。我现在想避免更改数百个文件,只是以某种方式要求 Junit 执行给定的 init 类/方法。 (原因:1)尽量减少重复 2)我们处于某种代码冻结状态 - 最好不要提交 repo)

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

【问题讨论】:

  • 扩展测试运行器可能不是最好的方式,但它可能是最简单的。理想情况下,您希望在每个测试中的方法上都有 @BeforeClass 注释,但正如您所说,更改数百个文件可能会降低这个选项的吸引力。
  • 旧的“搜索和替换”怎么样?使用一些巧妙的正则表达式,您可能可以将 setup 方法插入到所有测试用例中。
  • 感谢@RyanJ - 关于如何使用 ant 脚本中的自定义测试运行器的任何想法?
  • @isnot2bad - 是的,我可以使用正则表达式自动添加样板代码..但我想避免它,尤其是我们处于代码冻结状态..(Q 更新)
  • 鉴于您所处的情况,您可以尝试“org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatter”。名称是格式化程序,但您可以侦听诸如套件启动、测试启动等事件并执行一些常见的事情(无论您想到什么)。文档ant.apache.org/manual/Tasks/junit.html

标签: java ant junit


【解决方案1】:

我有点困惑,因为您说您不想更改代码但似乎可以编写自定义测试运行程序。不是说要改测试代码吗?

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

public class MySuite{

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

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

【讨论】:

  • 谢谢。还没有测试套件类 - 我不必在其中一个中列出所有(相关)测试吗?通过“代码”更改,我的意思是提交到存储库中的源/测试(任何新提交都会触发一个大型 CI 管道,其中包含我想要避免的一系列事件)。只需重新运行测试即可更改工具(例如junit runner)。
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
相关资源
最近更新 更多