JUnit测试相互影响

时间:2017-02-24 15:10:43

标签: java intellij-idea gradle junit

我正在使用大量遗留代码。开始时有一个JUnit-TestSuite。使用gradle运行所有测试时,它们都失败了。在IntelliJ中运行测试时,他们工作了。我们将gradle配置为使用测试套件。

现在有人报告测试在没有gradle的情况下在本地工作,但没有gradle。是时候我们解决这个烂摊子了。

有没有一种聪明的方法来确定哪些测试留下了一些配置或哪些测试依赖于其他测试?

1 个答案:

答案 0 :(得分:3)

从一个测试到另一个测试的这种“流血”的最可能原因是可变的静态值。默认情况下,所有测试都由同一个JVM运行,因此一个测试“变异”的静态变量在另一个测试中将“脏”。

可变的静力学是邪恶的!我正在开发一个代码库,目前在各处都有可变静态,这是一团糟。如果可能的话,你应该重构使用依赖注入并在实例中存储可变状态而不是静态。

作为一种解决方法,要使测试在gradle中运行,您可以使用Test.forkEvery每次测试使用单独的JVM,这样每个测试调用的静态变量都是“干净的”。例如

test {
    forkEvery = 1
}