我有一个使用 maven2 构建的项目,并针对代码运行一系列 JUnit 测试用例。到目前为止,这一切都运行良好,我现在有 2 个测试,必须按一定的顺序运行才能正常工作,比方说 TestA 和 Test(A 然后 B)。不幸的是,maven2 不理解这一点,所以我正在寻找一种方法来说服它需要按此顺序运行测试。
问题是我在 TestB 中设置一些最终静态字段,但我是从 TestA 执行此操作,TestA 本身使用这些字段,并且测试的成功执行取决于将这些字段设置为新值(绝对没有办法解决这个问题,否则我早就走了那条路)。因此,TestA 必须首先加载,并且当尝试访问 TestB 时,它当然会导致 TestB 被加载。但是,maven2 决定先运行 TestB,然后运行 TestA,这意味着这些最终字段已设置且无法更改。
所以我正在寻找一种方法来指定测试执行的顺序(每次先 A 然后 B),或者一种轻松地导致 TestB 被 JUnit 使用的任何类加载器重新加载的方法。
编辑 - 另一个选项可能是像旧的 JUnit GUI 工具那样的选项,它会导致每次测试重新加载所有类。我找了又找,在maven junit插件中没有找到这样的标志,如果存在这样的东西,那么也可以。
最佳答案
Fork mode可以强制每个测试在其自己的 JVM 中运行,以便为每个测试重新加载每个类。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>pertest</forkMode>
</configuration>
</plugin>
关于maven-2 - 使用 JUnit 的 maven2 中的类加载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1331633/