如何为 Junit 单元测试设置 JVM 参数?

2022-08-31 10:14:47

我有一些 Junit 单元测试,需要大量的堆空间来运行 - 即 1G.(它们测试 webstart 应用程序的内存密集型功能,该应用程序只能在足够的堆空间下运行,并且将在 Win 7 64 位计算机上内部运行 - 因此重新设计测试不是一个实用的建议。

我正在Intellij IDEA中开发,所以我知道我可以为测试类设置JVM参数(例如-Xmx1024M)。但是,这仅适用于运行整个测试类 - 如果我想运行单个测试,则必须为该测试方法重新创建运行聚合。

此外,这些是特定于IDE和盒子的 - 所以如果我切换盒子(我在多台机器上开发)或者我的一位同事试图运行测试,这些设置不会转移。(此外,我的同事还使用 Eclipse 和 NetBeans 等其他 IDE。FWIW,我们使用mercurial进行源代码控制。

对于构建周期,我们使用的是 Maven,所以我知道如何为此指定 JVM 参数。

所以: - 我正在寻找一种方法来指定将适用于整个测试类和各个测试方法的JVM参数;和 - 我想在任何机器上的IDE之间共享这些规范(从存储库中获取代码)。


答案 1

在Maven中,您可以配置surefire插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <argLine>-Xmx256M</argLine>
    </configuration>
</plugin>

如果使用 Maven 进行构建,则此配置将保留在源树中,并在执行测试时应用。请参阅 Maven Surefire 插件文档。


答案 2

在 IntelliJ 中,您可以为每个运行配置指定默认设置。在“运行/调试配置”对话框(用于为每个测试配置堆的对话框)中,单击“默认值”“JUnit”。这些设置将自动应用于每个新的 JUnit 测试配置。我猜Eclipse也有类似的设置。

但是,没有简单的选项可以在环境中传输此类设置(至少在IntelliJ中)。您可以将IntelliJ项目文件提交到您的存储库:它可能有效,但我不建议这样做。

您知道如何为 设置这些设置。好。这是最便携的方式(参见Ptomli的答案作为例子)。maven-surefire-plugin

对于其余的 - 您必须记住,JUnit测试用例只是一堆Java类,而不是一个独立的程序。这取决于运行器(让它成为一个独立的JUnit运行器,您的IDE,来设置这些选项。话虽如此,没有“便携式”方法来设置它们,因此无论跑步者如何,都会应用内存设置。maven-surefire-plugin

举个例子:在开发 servlet 时,你不能定义参数 - 由容器来定义它。你不能说:“这个 servlet 应该总是与 一起运行。XmxXmx=1G


推荐