首页 文章

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

提问于
浏览
77

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

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

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

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

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

7 回答

  • 1

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

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

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

    对于其他人 - 您必须记住,JUnit测试用例只是一堆Java类,而不是一个独立的程序 . 这取决于跑步者(让它成为一个独立的JUnit跑步者,你的IDE, maven-surefire-plugin 来设置这些选项 . 据说没有"portable"方式设置它们,因此无论跑步者如何都应用内存设置 .

    举个例子:在开发servlet时无法定义 Xmx 参数 - 由容器来定义它 . 你不能说:“这个servlet应该始终使用 Xmx=1G 运行 .

  • 17

    在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 Plugin文档 .

  • 7

    参数也可以动态设置 .

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

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

  • 45

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

    对于Eclipse:请您的同事设置以下内容:

    • Windows首选项/ Java /已安装的JRE:

    • 选择合适的JRE / JDK(或者对所有这些都做)

    • 编辑

    • 默认VM参数: -Xmx1024m

    • 完成,好的 .

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

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

    • 如果Maven可以运行它,则失败的原因通常是开发人员IDE的设置 . 开发人员应检查这些设置 .

    • 如果Maven也无法运行测试,开发人员知道失败的原因不是IDE,因此他/她可以使用IDE来调试测试 .

  • 63

    根据这个支持问题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测试运行 .

  • 1

    限于java.library.path JVM参数的eclipse特定替代方法允许为特定源文件夹而不是另一个响应中提出的整个jdk设置它:

    • 选择要启动的程序所在的源文件夹(通常是source / test / java)

    • type alt进入以打开该文件夹的“属性”页面

    • 在左侧面板中选择本机

    • 编辑本机路径 . 路径可以是绝对的或相对于工作空间,第二个是更具弹性的变化 .

    对于那些对maven argline标签应该优先于systemProperties的详细信息感兴趣的人,请查看,例如:

    Pick up native JNI files in Maven test (lwjgl)

  • 13

    您可以使用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

相关问题