開発マシンで単独で実行すると合格するJava junitテストがあります。また、antを介して呼び出されたすべてのテストを実行するhudsonジョブもあります。 Java 1.5。テストは最近までhudsonビルドで渡されていましたが、現在(関連するコード変更なし)1つのテストが次のエラーで毎回失敗します。
エラーメッセージ
Forked Java VM異常終了しました。レポートの時間は、VM終了までの時間を反映していません。
スタックトレース
junit.framework.AssertionFailedError:Forked Java VM異常終了しました。レポートの時間は、VM終了。
グーグルでは、他の多くの人が同じ問題に遭遇したように見えますが、そこには答えが見つかりませんでした。
同様の問題に直面しました。 antタスクとしてjunitテストを実行しました。 showoutput = "yes" ant junitプロパティを追加し、ant junitタスクを実行しました。次に、フォークされたjvmを終了させる例外スタックトレースを示しました。
私にとっては、フォークされた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」に分岐します。
これは、キャッチされていないRuntimeExceptionがスローされたときに発生する可能性があります。残念ながら、junit antタスクは例外を出力しないため、根本原因を特定する簡単な方法はありません。この問題を回避するには、例外が表示されるコマンドラインからテストケースを実行します。
Java <vm-args> org.junit.runner.JUnitCore <test-class-name>
私の場合、IllegalArgumentExceptionがスローされていました。
クラスパスで複数のバージョンのjunitになったときに、このエラーを見たことがあると思います。チェックアウトする価値があるかもしれません。
VM crashing?ダンプファイル(hs_err_pid*.log
)?その場合、ダンプファイルは、これがクラッシュする理由の手がかりを提供します。
この問題が発生したため、プロセスが実際にSystem.exit()を呼び出していたことがわかりました。ただし、Antにもバグがあり、これが時々表示されることがありました。 Ant 1.7.1にはバグが修正されていると思います。そのため、そのバージョンを実行していることを確認してください。
クラスパスに複数のjunit jarがあります。 1つはアリのもので、もう1つはWASのものです。エラーがなくなったことを削除すると... 1.8を使用しているAntバージョン
しばらく前とまったく同じことがありました。問題は、System.exit()がどこかで呼び出されていることです。ただし、コードまたは使用するライブラリのいずれかから呼び出しが行われる可能性があるため、見つけるのは困難です。
私は同じ問題に直面しました。問題は、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;
そしてそれは働いた。
NetBeansの新しいバージョンを外部ハードディスクに再インストールし、同時にJunitをアップグレードし、古いワークスペースを使用した後、問題に直面しました。
私にとって、同じ問題の解決策は簡単でした。
JUnit-Libraryをプロジェクトに追加するだけproperties
=> Libraries
=> Compile Tests
およびRun Tests
。
そのため、私の場合、それは単にライブラリが欠落しているか、JUnitバージョンの競合でした。
私もこの問題を抱えていました。以下から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が除外されると思います。
私たちにとって、実際には(Eclipseの新しいバージョンを使用して)偶然に、Weblogic 8.1/JDK 1.4.x環境と互換性のある古いantバージョンの代わりにAnt 1.7.xを使用し始めました。 Eclipse-> Windows-> Preferences-> Ant-> RuntimeでAntホームを以前のバージョンのAntに戻すことで、これを修正しました。
敬具Klas
次の環境変数を設定して問題を解決しました。
変数:_Java_OPTIONS値:-Xms128m -Xmx512m
私の場合、テストを実行したクラスパスは、環境変数に対してオペレーティングシステムで許可されているものの最大長を超えていました(別名 Linuxクラスパスが長すぎます)
解決策は、 pathing jar を作成することでした。簡単な手順:
Jar(またはIDE)を使用してプロジェクトのjarを作成しますMyProject.jar
テキストでManifest.txtというファイルを作成します
クラスパス:MyProject.jar
jar cfm PathingJar.jar manifest.txt MyRootPackage/*。class
次に、ビルドツールで、パスjar自体に対してテストディレクティブを実行します(他のクラスまたはjarを混在させないでください)。その後、その例外なしでテストを実行することができました。