繁体   English   中英

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

[英]How to set JVM parameters for Junit Unit Tests?

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

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

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

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

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

在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 插件文档。

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

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

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

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

举个例子:在开发 servlet 时不能定义Xmx参数 - 由容器来定义。 您不能说:“此 servlet 应始终以Xmx=1G运行。

参数也可以即时设置。

mvn test -DargLine="-Dsystem.test.property=test"

http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html

根据这个支持问题https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-

IntelliJ junit 测试运行的 -Xmx 参数将来自 maven-surefire-plugin(如果已设置)。

这个 pom.xml 片段

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-Xmx1024m</argLine>
            </configuration>
        </plugin>

似乎使用 IntelliJ 2016.2.4 将 -Xmx1024 参数传递给 junit 测试运行。

我同意其他人所说的没有简单的方法来分发这些设置。

对于 Eclipse:请您的同事进行以下设置:

  • Windows 首选项 / Java / 已安装的 JRE:
  • 选择合适的 JRE/JDK(或为所有的 JRE/JDK 选择)
  • 编辑
  • 默认 VM 参数: -Xmx1024m
  • 结束,好的。

之后所有测试都将使用-Xmx1024m运行,但不幸的是您在每个 Eclipse 安装中都设置了它。 也许您可以创建一个包含此设置的自定义 Eclipse 包并将其提供给您的同事。

以下工作过程也可能有所帮助: 如果 IDE 无法运行测试,开发人员应检查 Maven 是否可以运行此测试。

  • 如果 Maven可以运行它,失败的原因通常是开发人员 IDE 的设置。 开发人员应检查这些设置。
  • 如果 Maven 也无法运行测试,开发人员知道失败的原因不是 IDE,因此他/她可以使用 IDE 来调试测试。

您可以使用 systemPropertyVariables(java.protocol.handler.pkgs 是您的 JVM 参数名称):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
        <systemPropertyVariables>
            <java.protocol.handler.pkgs>com.zunix.base</java.protocol.handler.pkgs>
            <log4j.configuration>log4j-core.properties</log4j.configuration>
        </systemPropertyVariables>
    </configuration>
</plugin>

http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html

仅限于 java.library.path JVM 参数的 eclipse 特定替代方案允许将其设置为特定的源文件夹,而不是另一个响应中建议的整个 jdk:

  1. 选择要启动的程序所在的源文件夹(通常是 source/test/java)
  2. 键入 alt enter 打开该文件夹的“属性”页面
  3. 在左侧面板中选择原生
  4. 编辑本机路径。 路径可以是绝对的,也可以是相对于工作区的,第二个是更具变化弹性。

对于那些对为什么 maven argline 标签应该优先于 systemProperties 标签的细节感兴趣的人,请看,例如:

在 Maven 测试 (lwjgl) 中提取原生 JNI 文件

如果在Java代码中设置,可以这样设置

      static {
        System.getProperties().setProperty("env", "test");
        System.getProperties().setProperty("spring.application.name", "spring-example");
    }

参考:

https://stackoverflow.com/a/60654275/4712855

https://stackoverflow.com/a/10774432/4712855

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM