来自junittesting的“分叉Java VMexception退出”错误
我有一个单独运行在开发机器上的java junittesting。 我们还有一个hudson作业,在Java 1.5的Mac OS X 10.4节点上运行所有通过ant调用的testing。 直到最近,testing正在传递哈德森版本,但现在(没有相关的代码更改)每次都有一个testing失败,出现以下错误:
错误信息
分叉Java VMexception退出。 请注意,报告中的时间不会反映VM退出之前的时间。
堆栈跟踪
junit.framework.AssertionFailedError:分叉Java VMexception退出。 请注意,报告中的时间不会反映VM退出之前的时间。
谷歌search显示许多其他人似乎遇到了同样的问题,但在那里我找不到任何答案。
我面临类似的问题。 我把junittesting作为一个ant的任务。 我添加了showoutput =“是”antjunit属性,并运行ant junit任务。 然后显示导致分叉的jvm退出的exception堆栈跟踪。
对于我来说,在分叉虚拟机(junit任务fork =“yes”)中是一个“java.lang.OutOfMemoryError”,它使得这个消息出现在主虚拟机中。
OutOfMemory在ant日志中是可见的(当然,因为它仍然存在)。
我用ant1.7.1,所以升级ant没有希望。
在“运行>外部工具>外部工具> JRE”中放入相同的虚拟机参数(比Eclipse.ini(-Xms40m -Xmx512m -XX:MaxPermSize = 256M))后,问题就解决了。
我保持叉到“否”,以确保ant使用的参数。
我相信我看到这个错误,当我结束了我的类path的多个版本的junit。 可能值得一试。
虚拟机崩溃了吗? 你能find一个转储文件(叫做hs_err_pid*.log
)吗? 如果是这种情况,转储文件会给你提示为什么这个崩溃的线索。
当未捕获的RuntimeException被抛出时,可能会发生这种情况。 不幸的是,junit ant任务不会输出这个exception,所以没有简单的方法来确定根本原因。 您可以通过从将显示exception的命令行运行testing用例来解决此问题。
java <vm-args> org.junit.runner.JUnitCore <test-class-name>
就我而言,抛出了IllegalArgumentException。
我有这个问题,事实certificate,这个过程实际上是调用System.exit()。 然而,在Ant中也有一个有时出现的bug。 我认为Ant 1.7.1修正了这个错误。 所以确保你正在运行该版本。
我的classpath中有多个junit jar。 一个是ant,另一个是来自WAS。 当我删除错误消失了…我使用1.8的Ant版本
我有一回一样的东西。 问题是System.exit()被调用某处。 可能很难find,因为调用可能来自您的代码或您使用的库之一。
我通过设置下面的环境variables来解决我的问题:
variables:_JAVA_OPTIONS值:-Xms128m -Xmx512m
对我们来说,实际上我们偶然地(使用了更新版本的eclipse)开始使用Ant 1.7.x,而不是我们的老版本Ant,它与我们的Weblogic 8.1 / JDK 1.4.x环境兼容。 我们通过在Eclipse-> Windows-> Preferences-> Ant-> Runtime中将Ant Home更改回到旧版本的Ant来解决这个问题。
问候Klas
在将新版本的NetBeans重新安装到外部硬盘上之后,我同时升级了Junit并使用了旧的工作空间,所以遇到了问题。
对我来说,同样的问题的解决scheme很简单:
只需将JUnit-Library添加到项目properties
=> Libraries
=> Compile Tests
和Run Tests
。
所以,就我而言,这只是一个缺less的库或JUnit版本冲突。
在我的情况下,它是一个类中的静态初始化/方法/块未捕获的exception。
具体来说,我有一个类在另一个类中调用静态方法,它触发了一个NumberFormatExceptionexception。
BTW添加“showoutput = true”到build.xml中的任务没有帮助排除故障。 由于静态块是最先运行的东西之一,所以JVM在可以输出任何东西之前就炸了。
我也有这个问题。 将junit任务从:
<batchtest fork="yes" ... />
至
<batchtest fork="no" ... />
给我修好了 我不完全理解这个ant的领域,或者为什么这样做会解决这个问题。 在我的场景中,它是“BeforeFirstTest”中的错误,我认为它是因为我的类path中有两个ant文件(这可能是我应该修复的)
我认为问题是与ant的版本之一: http : //track.pmease.com/browse/QB-500 ;jsessionid= C1CF6999CBBDB5097A9CFCF4A11AF6C0?page= com.atlassian.jira.plugin.system.issuetabpanels: all-tabpanel
ETA:我认为batchtest =“no”实际上改变了类path,因此导致排除了我的违规antjar。
我面临同样的问题。 问题在于模拟Config类时产生字节码; 我们改变了导入
import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when;
它的工作。
在我的情况下,运行我的testing的类path超出了操作系统允许的环境variables(也就是Linux类path太长的问题)的最大长度。
解决scheme是创build一个path的jar 。 简化的步骤:
-
使用jar(或者你的IDE)来制作一个你的项目的jar,我们把它叫做MyProject.jar
-
用文本创build一个名为Manifest.txt的文件
类path:MyProject.jar
- 运行jar命令行这个
jar cfm PathingJar.jar manifest.txt MyRootPackage / *。class
然后,在你的构build工具中,针对pathjar本身运行你的testing指令(不要混入其他类或jar)。 然后我能够让我的testing没有例外运行。
我将TestNG
库添加到testing库中 ,并解决了问题。