来自junit测试的“分叉Java VM异常退出”错误

时间:2009-12-04 11:16:23

标签: java ant junit hudson

我有一个java junit测试,它在开发机器上单独运行时通过。我们还有一个hudson作业,它运行所有测试,通过ant,在带有Java 1.5的Mac OS X 10.4节点上调用。测试在hudson构建中传递直到最近,但现在(没有相关的代码更改)每次测试失败,并出现以下错误:

错误消息

  

Forked Java VM异常退出。   请注意报告中的时间   不反映VM之前的时间   退出。

堆栈跟踪

  

junit.framework.AssertionFailedError:   分叉的Java VM异常退出。   请注意报告中的时间   不反映VM之前的时间   退出。

谷歌搜索显示许多其他人似乎遇到了同样的问题,但在那里我找不到任何答案。

17 个答案:

答案 0 :(得分:20)

我遇到了类似的问题。我将junit测试作为蚂蚁任务运行。我添加了 showoutput =“yes” ant junit属性并运行了ant junit任务。然后它显示异常堆栈跟踪导致分叉的jvm退出。

答案 1 :(得分:7)

对我来说,分叉虚拟机中的“java.lang.OutOfMemoryError”(带有fork =“yes”的junit任务)使得此消息出现在主虚拟机中。

OutOfMemory在ant日志中可见(好,因为它仍然存在,所以是可见的。)

我使用ant 1.7.1,因此升级ant没有希望。

在“运行>外部工具>外部工具> JRE”中将相同的VM参数放入Eclipse.ini(-Xms40m -Xmx512m -XX:MaxPermSize = 256M)后,问题就解决了。

我将fork保持为“no”,以确保ant使用参数。

答案 2 :(得分:4)

我相信当我在类路径上遇到多个版本的junit时,我看到了这个错误。可能值得一试。

答案 3 :(得分:4)

抛出未捕获的RuntimeException时会发生这种情况。不幸的是,junit ant任务不输出异常,因此没有一种简单的方法来确定根本原因。您可以通过从将显示异常的命令行运行测试用例来解决此问题。

java <vm-args> org.junit.runner.JUnitCore <test-class-name>

在我的情况下,抛出了IllegalArgumentException。

答案 4 :(得分:3)

虚拟机崩溃了吗?你能找到一个转储文件(称为hs_err_pid*.log)吗?如果是这种情况,那么转储文件将为您提供崩溃原因的线索。

答案 5 :(得分:2)

我遇到了这个问题,事实证明该进程实际上正在调用System.exit()。然而,Ant中也有一个错误,有时会出现这种错误。我认为Ant 1.7.1修复了这个bug。因此,请确保您正在运行该版本。

答案 6 :(得分:1)

我的classpath中有多个junit jar。一个是蚂蚁,另一个来自WAS。当我删除时,错误消失了...我正在使用的1.8版本的Ant版本

答案 7 :(得分:1)

我前段时间完全一样。问题是System.exit()正在某处调用。但是很难找到,因为调用可能来自您的代码或您使用的某个库。

答案 8 :(得分:0)

我通过设置以下环境变量解决了我的问题:

变量:_JAVA_OPTIONS 值:-Xms128m -Xmx512m

答案 9 :(得分:0)

对于我们来说,实际上我们偶然(使用较新版本的eclipse)开始使用Ant 1.7.x而不是我们的旧ant版本,它与我们的Weblogic 8.1 / JDK 1.4.x环境兼容。我们通过将Eclipse中的Ant Home - &gt; Windows-&gt; Preferences-&gt; Ant-&gt; Runtime更改回我们旧版本的Ant来修复此问题。

此致 克拉斯

答案 10 :(得分:0)

我遇到了同样的问题。问题在于使用模拟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;

并且有效。

答案 11 :(得分:0)

在将新版本的NetBeans重新安装到外部硬盘,同时升级Junit并使用旧工作区后,我遇到了问题。

对我来说,同样问题的解决方案很简单:

只需将JUnit-Library添加到项目properties =&gt; Libraries =&gt; Compile TestsRun Tests

因此,就我而言,它只是一个缺少的库或JUnit版本冲突。

答案 12 :(得分:0)

在我的例子中,它是类中静态初始化程序/方法/块中的未捕获异常。

具体来说,我有一个类在另一个类中调用静态方法,它触发了一个NumberFormatException。

BTW添加&#34; showoutput = true&#34;到build.xml中的任务没有帮助排除故障。由于静态块是最先运行的东西之一,因此JVM在输出任何内容之前就会爆炸。

答案 13 :(得分:0)

我也有这个问题。从以下位置更改junit任务:

<batchtest fork="yes" ... /> 

<batchtest fork="no" ... /> 

为我修好了。我不完全理解蚂蚁的这个区域,或者为什么这样做会解决它。在我的场景中,&#34; BeforeFirstTest&#34;因为我的类路径中有两个ant文件(这可能是我应该修复的),所以我认为它是barfs。

我认为问题出在其中一个版本的ant: http://track.pmease.com/browse/QB-500;jsessionid=C1CF6999CBBDB5097A9CFCF4A11AF6C0?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

ETA:我认为batchtest =&#34; no&#34;实际上改变了类路径,因此排除了我的违规蚂蚁罐。

答案 14 :(得分:0)

在我的例子中,我的测试运行的类路径超出了操作系统允许的环境变量的最大长度(又名the Linux Classpath too long issue).

解决方案是创建pathing jar。简化步骤:

  1. 使用jar(或您的IDE)制作项目的jar,我们将其称为 MyProject.jar

  2. 使用文本

  3. 创建一个名为Manifest.txt的文件
      

    Class-Path:MyProject.jar

    1. 运行jar命令行
    2.   

      jar cfm PathingJar.jar manifest.txt MyRootPackage / * .class

      然后,在您的构建工具中,针对路径jar本身运行您的test指令(不要混入其他类或jar)。然后我能够让我的测试在没有异常的情况下运行。

答案 15 :(得分:0)

在Jenkins上运行测试时,我遇到了类似的问题,相同的测试在本地通过。

通过将日志级别设置为WARN

,我能够解决此问题

答案 16 :(得分:-1)

我将import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { String input1 = "Hello world with warm welcome from Mr.kajezevu"; String input2 = "w"; //output should be any word starting with w i.e {world,warm,welcome} List < String > l = new ArrayList < String > (); String[] str = input1.split("\\s+");//splits a given string at spaces for (int i = 0; i < str.length; i++) { if (str[i].length() >= input2.length()) { // checks if the length of input2 is not greater than the str[i] selected if (input2.equals(str[i].substring(0, input2.length()))) { //comparing the two string if they are equal l.add(str[i]); } } } String[] result = l.toArray(new String[l.size()]); for (int i = 0; i < result.length; i++) { System.out.println(result[i]); } } } 库添加到测试库,它解决了问题。