mbr*_*s42 5 java junit intellij-idea gradle
我正在处理很多遗留代码。有一个 JUnit-TestSuite 开始。使用 gradle 运行所有测试时,它们都失败了。在 IntelliJ 中运行测试时,它们起作用了。我们将 gradle 配置为使用测试套件。
现在有人报告了在没有 gradle 的情况下在本地工作的测试,但没有 gradle。是时候解决这个烂摊子了。
有没有一种聪明的方法来确定哪个测试留下了一些配置或者哪些测试依赖于其他测试?
从一个测试“渗入”另一个测试的最可能原因是可变的静态值。默认情况下,所有测试都由同一个 JVM 运行,因此被一个测试“变异”的静态变量在另一测试中将是“脏”的。
可变的静态是邪恶的!我正在开发一个代码库,目前到处都有可变的静态数据,而且一团糟。如果可能,您应该重构以使用依赖项注入并将可变状态存储在实例中而不是静态中。
最好的解决方法是找到“弄脏”静态可变变量的测试并执行
@After
public void cleanup() {
SomeStatic.reset();
}
Run Code Online (Sandbox Code Playgroud)
如果您找不到导致问题的“脏”测试,您可能被迫在“失败”测试中执行以下操作。这不是首选,而且有点 hacky
@Before
public void cleanBefore() {
SomeStatic.reset();
}
Run Code Online (Sandbox Code Playgroud)
但这有轻微的代码“味道”。最好找到“弄脏”可变静态的有问题的测试
“核心”选项是在自己的 jvm 中运行每个测试。这完全是一种黑客行为,应该不惜一切代价避免。它将大大增加运行测试所需的时间
test {
forkEvery = 1
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |