web-dev-qa-db-ja.com

junitテストからの「フォークJava VM異常終了)」エラー

開発マシンで単独で実行すると合格するJava junitテストがあります。また、antを介して呼び出されたすべてのテストを実行するhudsonジョブもあります。 Java 1.5。テストは最近までhudsonビルドで渡されていましたが、現在(関連するコード変更なし)1つのテストが次のエラーで毎回失敗します。

エラーメッセージ

Forked Java VM異常終了しました。レポートの時間は、VM終了までの時間を反映していません。

スタックトレース

junit.framework.AssertionFailedError:Forked Java VM異常終了しました。レポートの時間は、VM終了。

グーグルでは、他の多くの人が同じ問題に遭遇したように見えますが、そこには答えが見つかりませんでした。

44
Alb

同様の問題に直面しました。 antタスクとしてjunitテストを実行しました。 showoutput = "yes" ant junitプロパティを追加し、ant junitタスクを実行しました。次に、フォークされたjvmを終了させる例外スタックトレースを示しました。

21
Prashanth

私にとっては、フォークされたVM(fork = "yes"を含むJunitタスク)の "Java.lang.OutOfMemoryError"で、このメッセージがメインVMに表示されました。

OutOfMemoryはantログに表示されていました(まだ存在しているので表示されます)。

私はant 1.7.1を使用しているため、antのアップグレードには希望がありません。

Eclipse.ini(-Xms40m -Xmx512m -XX:MaxPermSize = 256M)よりも同じ「VM "Run> External tools> External tools> JRE」のパラメーターを入力した後、問題は解決します。

Antがパラメーターを使用することを確認するために、「no」に分岐します。

7
Tristan

これは、キャッチされていないRuntimeExceptionがスローされたときに発生する可能性があります。残念ながら、junit antタスクは例外を出力しないため、根本原因を特定する簡単な方法はありません。この問題を回避するには、例外が表示されるコマンドラインからテストケースを実行します。

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

私の場合、IllegalArgumentExceptionがスローされていました。

4
Alex C

クラスパスで複数のバージョンのjunitになったときに、このエラーを見たことがあると思います。チェックアウトする価値があるかもしれません。

4
Sharebear

VM crashing?ダンプファイル(hs_err_pid*.log)?その場合、ダンプファイルは、これがクラッシュする理由の手がかりを提供します。

3
Brian Agnew

この問題が発生したため、プロセスが実際にSystem.exit()を呼び出していたことがわかりました。ただし、Antにもバグがあり、これが時々表示されることがありました。 Ant 1.7.1にはバグが修正されていると思います。そのため、そのバージョンを実行していることを確認してください。

2
Francis Upton

クラスパスに複数のjunit jarがあります。 1つはアリのもので、もう1つはWASのものです。エラーがなくなったことを削除すると... 1.8を使用しているAntバージョン

1
ankit jain

しばらく前とまったく同じことがありました。問題は、System.exit()がどこかで呼び出されていることです。ただし、コードまたは使用するライブラリのいずれかから呼び出しが行われる可能性があるため、見つけるのは困難です。

1
triggerNZ

私は同じ問題に直面しました。問題は、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
user1164061

NetBeansの新しいバージョンを外部ハードディスクに再インストールし、同時にJunitをアップグレードし、古いワークスペースを使用した後、問題に直面しました。

私にとって、同じ問題の解決策は簡単でした。

JUnit-Libraryをプロジェクトに追加するだけproperties => Libraries => Compile TestsおよびRun Tests

そのため、私の場合、それは単にライブラリが欠落しているか、JUnitバージョンの競合でした。

0
JPS

私もこの問題を抱えていました。以下からjunitタスクを変更します。

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

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

私のためにそれを修正しました。私はこのアリの領域を完全には理解していません、またはなぜこれを行うとそれが修正されるでしょうか。私のシナリオでは、「BeforeFirstTest」のエラーであり、クラスパスに2つのantファイルがあるためにbarfsになると思います(おそらく修正する必要があります)

問題はantのいずれかのバージョンにあると思います: http://track.pmease.com/browse/QB-500;jsessionid=C1CF6999CBBDB5097A9CFCF4A11AF6C0?page=com.atlassian.jira.plugin.system.issuetabpanels :all-tabpanel

ETA:batchtest = "no"は実際にクラスパスを変更するため、問題のあるant jarが除外されると思います。

0
andrea

私たちにとって、実際には(Eclipseの新しいバージョンを使用して)偶然に、Weblogic 8.1/JDK 1.4.x環境と互換性のある古いantバージョンの代わりにAnt 1.7.xを使用し始めました。 Eclipse-> Windows-> Preferences-> Ant-> RuntimeでAntホームを以前のバージョンのAntに戻すことで、これを修正しました。

敬具Klas

0
KlasE

次の環境変数を設定して問題を解決しました。

変数:_Java_OPTIONS値:-Xms128m -Xmx512m

0
ChikoFerrara

私の場合、テストを実行したクラスパスは、環境変数に対してオペレーティングシステムで許可されているものの最大長を超えていました(別名 Linuxクラスパスが長すぎます)

解決策は、 pathing jar を作成することでした。簡単な手順:

  1. Jar(またはIDE)を使用してプロジェクトのjarを作成しますMyProject.jar

  2. テキストでManifest.txtというファイルを作成します

クラスパス:MyProject.jar

  1. Jarコマンドラインを実行します

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

次に、ビルドツールで、パスjar自体に対してテストディレクティブを実行します(他のクラスまたはjarを混在させないでください)。その後、その例外なしでテストを実行することができました。

0
Jason D