gpt4 book ai didi

java - JUnit 测试相互影响

转载 作者:搜寻专家 更新时间:2023-11-01 02:37:50 26 4
gpt4 key购买 nike

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

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

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

最佳答案

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

可变静态是邪恶的!我正在处理一个代码库,目前到处都是可变的静态变量,而且一团糟。如果可能,您应该重构以使用依赖注入(inject)并在实例中而不是静态中存储可变状态。

最好的解决方法是找到“弄脏”静态可变变量的测试并执行

@After
public void cleanup() {
SomeStatic.reset();
}

如果找不到导致问题的“脏”测试,您可能被迫在“失败”测试中执行以下操作。这不是首选,而且有点 hacky

@Before
public void cleanBefore() {
SomeStatic.reset();
}

但这有轻微的代码“味道”。最好找到“弄脏”可变静态的有问题的测试

“核”选项是在其自己的 jvm 中运行每个测试。这是一个彻头彻尾的 hack,应该不惜一切代价避免。它将大大增加运行测试所需的时间

test {
forkEvery = 1
}

参见 Test.forkEvery

关于java - JUnit 测试相互影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42442016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com