我有一个java junit测试,它在开发机器上单独运行时通过。我们还有一个hudson作业,它运行所有测试,通过ant,在带有Java 1.5的Mac OS X 10.4节点上调用。测试在hudson构建中传递直到最近,但现在(没有相关的代码更改)每次测试失败,并出现以下错误:
错误消息
Forked Java VM异常退出。 请注意报告中的时间 不反映VM之前的时间 退出。
堆栈跟踪
谷歌搜索显示许多其他人似乎遇到了同样的问题,但在那里我找不到任何答案。junit.framework.AssertionFailedError: 分叉的Java VM异常退出。 请注意报告中的时间 不反映VM之前的时间 退出。
答案 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 Tests
和Run 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。简化步骤:
使用jar(或您的IDE)制作项目的jar,我们将其称为 MyProject.jar
使用文本
Class-Path:MyProject.jar
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]);
}
}
}
库添加到测试库,它解决了问题。