Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit测试相互影响_Java_Intellij Idea_Gradle_Junit - Fatal编程技术网

Java JUnit测试相互影响

Java JUnit测试相互影响,java,intellij-idea,gradle,junit,Java,Intellij Idea,Gradle,Junit,我正在处理很多遗留代码。首先是一个JUnit测试套件。当使用gradle运行所有测试时,它们都失败了。在IntelliJ中运行测试时,它们工作正常。我们将gradle配置为使用测试套件 现在有人报告说测试在没有gradle的情况下在本地工作,但没有gradle。我们该收拾这乱七八糟的东西了 有没有一种聪明的方法来确定哪个测试留下了一些配置,或者哪些测试依赖于其他测试 从一个测试“出血”到另一个测试的最可能原因是可变的静态值。默认情况下,所有测试都由相同的JVM运行,因此一个测试“变异”的静态变量

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

现在有人报告说测试在没有gradle的情况下在本地工作,但没有gradle。我们该收拾这乱七八糟的东西了


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

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

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

作为一种变通方法,为了让测试在gradle中运行,您可以在每个测试中使用单独的JVM,这样静态变量对于每个测试调用都是“干净的”。乙二醇

test {
    forkEvery = 1
}

可能是执行的顺序,我认为IDE和JUnit一般不保证执行的顺序。此外,如果存在不可变的静态变量,则可能会导致一些问题-对不起,我的评论是基于观点的。我不知道有什么简单的方法。。。我会使用
@BeforeClass
查找测试。测试失败也会明显地将您指向令人不快的类。我称之为bug修复,如果有一种自动修复bug的方法,我们都会失业。如果你能得到一个代码覆盖率报告,它可能会准确地指出故障发生的位置。谢谢,@cesaregb,我将查找静态变量@ChristopherSchneider谢谢,我会在上课前查找
@。但我认为测试失败不会让我看到那个令人不快的类,他们只会让我看到哪个类没有从头开始,而不是哪个其他类导致了这一点,对吗?@MelanieB。它不会显示是什么其他类导致了问题,但它应该有助于显示是什么交互导致了失败。我没有看你的源代码,所以我不能再多说了。谢谢!我将寻找可变的静态值。我们有一个设置类,所以我强烈怀疑里面可能有什么东西。我从来没有使用过依赖注入,我必须研究一下。我不需要gradle技巧(尽管它很酷),因为gradle现在确实使用测试套件成功运行。每个改变
设置的测试都应该在
@After
@AfterClass
方法中调用
设置.reset()
。有时,如果您无法追踪到顽皮的测试,那么在
@之前或
@之前的类中也可以更容易地放置
设置.reset()