如何为Junitunit testing设置JVM参数?
我有一些需要大量堆空间运行的Junitunit testing – 例如1G。 (他们testing的webstart应用程序的内存密集型function只能运行足够的堆空间,并将在Win 7 64位机器上运行,因此重新devisetesting并不是一个实际的build议。)
我正在开发Intellij IDEA,所以我知道我可以为testing类设置JVM参数(例如-Xmx1024M)。 然而,这只是运行整个testing类 – 如果我想运行一个单独的testing,我必须重新创build该testing方法的运行configuration。
另外,这些都是IDE和盒子特定的 – 所以如果我切换盒子(我在多台机器上开发)或者我的一个同事试图运行testing,那些设置不会被传输。 (另外,我的同事也使用Eclipse和NetBeans等其他IDE。)FWIW,我们使用mercurial进行源代码控制。
对于构build周期,我们使用Maven,所以我知道如何为它指定JVM参数。
所以: – 我正在寻找一种方法来指定适用于整个testing类和单个testing方法的JVM参数; 并且 – 我想在任何机器上的IDE上分享这些规范(从存储库中获取代码)。
在IntelliJ中,您可以为每个运行configuration指定默认设置。 在运行/debuggingconfiguration对话框(您用来configuration每个testing的堆)中单击默认和JUnit 。 这些设置将自动应用于每个新的JUnittestingconfiguration。 我猜想Eclipse的设置相似。
但是,在整个环境中传输这样的设置(至less在IntelliJ中)没有简单的select。 您可以将IntelliJ项目文件提交到您的存储库:它可能工作,但我不推荐它。
你知道如何为maven-surefire-plugin
设置这些。 好。 这是最便携的方式(参见Ptomli的答案)。
其余部分 – 您必须记住,JUnittesting用例只是一堆Java类,而不是一个独立的程序。 这是由运行者决定的(让它成为一个独立的JUnit运行器,IDE, maven-surefire-plugin
来设置这些选项。据说没有“便携”的方式来设置它们,所以内存设置被应用,而不pipe跑步者。
举个例子:开发servlet时不能定义Xmx
参数 – 由容器来定义。 你不能说:“这个servlet应该总是以Xmx=1G
运行。
在Maven中,你可以configurationsurefire插件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.9</version> <configuration> <argLine>-Xmx256M</argLine> </configuration> </plugin>
如果您使用Maven进行构build,则此configuration将在源代码树中执行,并在执行testing时应用。 请参阅Maven Surefire插件文档。
参数也可以在飞行中设置。
mvn test -DargLine="-Dsystem.test.property=test"
请参阅http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html
我同意其他人说,没有简单的方法来分配这些设置。
对于Eclipse:请您的同事设置以下内容:
- Windows首选项/ Java /已安装的JRE:
- select适当的JRE / JDK(或为所有这些做)
- 编辑
- 默认VM参数:
-Xmx1024m
- 完成,好的。
之后,所有的testing将运行-Xmx1024m
但不幸的是你已经在每个Eclipse安装中设置它。 也许你可以创build一个包含这个设置的自定义Eclipse包,并将其提供给你的同事。
下面的工作过程也可以帮助:如果IDE不能运行testing,开发人员应该检查Maven是否可以运行这个testing。
- 如果Maven 可以运行它,那么失败的原因通常是开发者IDE的设置。 开发者应该检查这些设置。
- 如果Maven也不能运行testing,开发人员知道失败的原因不是IDE,所以他/她可以使用IDE来debuggingtesting。
IntelliJ junittesting运行的-Xmx参数将来自maven-surefire插件(如果已设置)。
这个pom.xml片断
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>-Xmx1024m</argLine> </configuration> </plugin>
似乎将-Xmx1024parameter passing给junittesting运行,IntelliJ 2016.2.4。
一个限于java.library.path JVM参数的日食专用替代scheme允许将其设置为特定的源文件夹,而不是像另一个响应中提出的那样为整个jdk设置:
- select启动程序所在的源文件夹(通常为source / test / java)
- 键入alt回车打开该文件夹的属性页面
- 在左侧面板中select本机
- 编辑本机path。 path可以是绝对的,也可以是相对于工作空间的,第二种是更具弹性。
对于那些对maven argline标签为什么比systemProperties更受欢迎的细节感兴趣,请看下面的例子:
在Maventesting(lwjgl)中选取原生的JNI文件
你可以使用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
- 在OS X上的IntelliJ,你如何清除所有的全球设置信息,许可等(任何项目的外部)
- Intellij Commander的目的是什么?
- 在Android Studio中支持@SuppressWarnings值
- Maven与Intellij之间如何处理Junit中的相对path
- 如何使PHPStorm / Intellij IDEA Dark(整个IDE,而不仅仅是配色scheme)
- 为什么Androidtesting运行器报告“空testing套件”?
- IntelliJ IDEA中的项目语言级别是什么?
- configurationIntelliJ IDEA,以便在git中检测到源,但检测到未注册的VCS根目录
- 在“意外”点击记住决定后,在IntelliJ的新窗口中打开一个项目