在Eclipse中每个JUnit测试都在单独的JVM中运行?

14

我有一个项目,其中包含大约200个测试类中的近500个独立测试。其中一些测试完成后未能很好地清理其自身状态,在Eclipse中这会导致某些测试失败。如果通过Ant从命令行运行测试套件,则所有测试都会通过。

我是否可以在Eclipse中启用“测试隔离”?即使运行时间更长,我也不介意。

从长远来看,我将清理不良表现的测试,但在短期内,我想让测试正常工作。

3个回答

3

它只会为整个测试套件分叉一个新的JVM,而不是为每个单独的测试分叉一个。 - Michael Borgwardt
2
@Michael - 如果forkmode属性设置为“perTest”,则应为每个测试创建一个新的JVM - 这是默认设置。 - Reuben Peeris
链接似乎已损坏--请尝试这个链接:http://ant.apache.org/manual/Tasks/junit.html - Steve Powell
哦,当我第一次回答时它起作用了 - 我会编辑我的答案 :) - Chris Dennett

1

以下是我找到的解决方案,可以在各自的JVM中执行每个测试类:

<plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
                <configuration>
                    <forkCount>1</forkCount>
                    <reuseForks>false</reuseForks>
                </configuration>
            </plugin>

forkCount=1/reuseForks=false 在每个测试类之间依次执行,每个测试类在自己的JVM进程中运行。这种方式提供了最高级别的测试执行隔离,但可能也会导致所有可用选项中最长的执行时间。将其视为最后的选择。[1]
这对我来说解决了在IntelliJ之外直接使用mvn test运行测试时的问题,不幸的是IntelliJ不支持这一点。

0

我也有类似的需求,并开发了小型Maven插件Jute,已发布在Maven中央仓库。它为每个JUnit测试方法启动外部JVM进程。


1
他想在Eclipse中运行它们。我猜他和我一样,希望在JUnit选项卡中看到单元测试结果。他已经说明他正在使用Ant而不是Maven - Ant已经可以让你以他想要的方式运行测试。 - mjaggard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接