2009-12-04 54 views
39

我有一个java junit测试,在开发机器上单独运行时通过。我们还有一个hudson作业,它在Java 1.5的Mac OS X 10.4节点上运行通过ant调用的所有测试。该测试是通过在哈德森构建直到最近,但现在(有没有相关的代码更改)一个测试失败每次,出现以下错误:“分叉的Java虚拟机异常退出”来自junit测试的错误

错误消息

Forked Java VM exited abnormally. Please note the time in the report does not reflect the time until the VM exit.

堆栈跟踪

junit.framework.AssertionFailedError: Forked Java VM exited abnormally. Please note the time in the report does not reflect the time until the VM exit.

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

+0

也许提供完整的堆栈跟踪。 – 2009-12-05 22:24:00

+0

帕斯卡尔:没有完整的堆栈跟踪。 我仍然没有找到答案,但我们已经通过将hudson作业移至运行OS X 10.5和Java 1.6的不同Mac来解决此问题。这个问题没有在这个设置上表现出来。 – Alb 2010-05-31 21:16:12

+0

该项目不会碰巧使用JMock,并声明了javaagent参数,对吧? – yihtserns 2011-04-14 14:43:55

回答

17

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

1

我有这个问题,事实证明,该进程实际上是调用System.exit()。然而,Ant中也存在一个有时会出现的错误。我认为Ant 1.7.1修正了这个错误。所以确保你正在运行该版本。

3

虚拟机崩溃了吗?你能找到一个转储文件(称为hs_err_pid*.log)吗?如果是这样的话,转储文件会给你提示为什么会崩溃的线索。

+1

Windows机器怎么样? – PriWeb 2012-01-10 07:26:59

4

我相信我看到这个错误,当我结束了我的classpath的多个版本的junit。可能值得一试。

0

我刚刚回来的时候完全一样。问题是System.exit()被调用某处。尽管这可能很难找到,因为调用可能来自您的代码或您使用的某个库。

+6

无论谁发布一个通用的库来调用System.exit()都需要被追捕和拍摄。 – 2010-05-31 21:36:46

7

对我来说,它是分叉虚拟机(junit任务fork =“yes”)中的一个“java.lang.OutOfMemoryError”,它使这个消息出现在主虚拟机中。

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

我使用ant 1.7.1,所以升级ant就没希望了。

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

我保持叉为“否”,以确保蚂蚁使用参数。

+2

允许分叉的junit进程访问更多内存的另一种方法是:在junit ant任务上使用maxmemory属性(详情请参阅http://ant.apache.org/manual/Tasks/junit.html)。 – 2010-05-31 21:19:05

+0

它与eclipse的情况下,与ANT运行时我们可以做什么? – PriWeb 2012-01-10 07:29:55

0

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

变量:_JAVA_OPTIONS 值:-Xms128m -Xmx512m

0

对于我们来说,这实际上是我们意外(使用日食的新版本)开始使用Ant 1.7.x,而不是我们的旧Ant版本,它与我们的Weblogic 8.1/JDK 1.4.x环境兼容。我们通过在Eclipse-> Windows-> Preferences-> Ant-> Runtime中将Ant Home更改回到旧版本的Ant来解决此问题。

问候 克拉斯

1

我在我的类路径中的多个JUnit的罐子。一个是蚂蚁,另一个是来自WAS。当我删除错误消失了...我正在使用的Ant版本1.8

3

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

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

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

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; 

它的工作。

0

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

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

只需添加了JUnit库项目properties =>Libraries =>Compile TestsRun Tests

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

0

在我的情况下,它是一个类中的静态初始化/方法/块未捕获的异常。

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

顺便说一句,将“showoutput = true”添加到build.xml中的任务并没有帮助排除故障。由于静态块是最先运行的东西之一,JVM在它可以输出任何东西之前就炸毁了。

0

我也有这个问题。从改变junit任务:

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

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

固定对我来说。我不完全理解这个区域的蚂蚁,或者为什么这样做会解决它。在我的场景中,它是“BeforeFirstTest”中的错误,我认为它是因为我的类路径中有两个ant文件(这可能是我应该修复的)的barf

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

ETA:我认为batchtest =“no”实际上改变了类路径,因此导致排除了我的违规蚂蚁罐。

-1

我加了TestNG库到测试库它修复了这个问题。

0

就我而言,我的测试运行的类路径超出了什么是由操作系统允许的环境变量的最大长度(又名the Linux Classpath too long issue).

的解决方案是创建一个pathing jar简化步骤:

  1. 使用的jar(或您的IDE),使你的项目的罐子,我们把它叫做MyProject.jar

  2. 马柯被叫Manifest.txt与文本文件

Class-Path: MyProject.jar

  • 运行jar命令行此
  • jar cfm PathingJar.jar manifest.txt MyRootPackage/*.class

    然后,在你的构建工具,针对路径jar本身运行测试指令(不要混入其他类或jar)。然后我能够让我的测试运行,没有例外。

    相关问题