2009-12-04 52 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)。然後我能夠讓我的測試運行,沒有例外。

    相關問題