web-dev-qa-db-ja.com

JunitユニットテストのJVMパラメーターを設定する方法

実行するために大量のヒープスペースを必要とするいくつかのJunitユニットテストがあります-1G (十分なヒープ領域でのみ実行され、Win 7 64ビットマシンで内部的に実行されるWebstartアプリのメモリ集中型機能をテストします。したがって、テストの再設計は実用的な提案ではありません。)

私はIntellij IDEAで開発しているので、テストクラスのJVMパラメーター(-Xmx1024Mなど)を設定できることを知っています。ただし、これはテストクラス全体を実行するためだけのものです。個々のテストを実行する場合は、そのテストメソッドの実行構成を再作成する必要があります。

また、これらはIDEおよびボックス固有であるため、ボックスを切り替える(複数のマシンで開発する)か、同僚の1人がテストを実行しようとすると、これらの設定は転送されません。 (また、EclipseやNetBeansなどの他のIDEが同僚によって使用されています。)FWIW、ソースコード管理にMercurialを使用しています。

ビルドサイクルでは、Mavenを使用しているため、そのためのJVMパラメーターを指定する方法を知っています。

だから:-テストクラス全体と個々のテストメソッドに適用されるJVMパラメータを指定する方法を探しています。および-(リポジトリからコードを取得した)任意のマシンのIDE間でこれらの仕様を共有したいと思います。

88
amaidment

IntelliJでは、各実行構成のデフォルト設定を指定できます。 実行/デバッグ構成ダイアログ(テストごとにヒープを構成するために使用するダイアログ)でデフォルトおよびJUnitをクリックします。これらの設定は、新しい各JUnitテスト構成に自動的に適用されます。 Eclipseにも同様の設定が存在すると思います。

ただし、このような設定を(少なくともIntelliJで)環境間で転送する簡単なオプションはありません。 IntelliJプロジェクトファイルをリポジトリにコミットできます。動作する可能性がありますが、お勧めしません。

これらをmaven-surefire-pluginに設定する方法を知っています。良い。これは最も移植性の高い方法です(例についてはPtomliの回答を参照してください)。

残りの部分-JUnitテストケースは、スタンドアロンプ​​ログラムではなく、単なるJavaクラスの集まりであることを覚えておく必要があります。ランナー次第です(スタンドアロンJUnitランナー、IDE、maven-surefire-pluginにしてこれらのオプションを設定します。これらを設定するための「移植可能な」方法はないため、メモリ設定はランナー。

例を挙げると、サーブレットの開発時にXmxパラメーターを定義することはできません。それを定義するのはコンテナー次第です。 「このサーブレットは常にXmx=1Gで実行する必要があります」と言うことはできません。

47

Mavenでは、surefireプラグインを設定できます

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <argLine>-Xmx256M</argLine>
    </configuration>
</plugin>

ビルドにMavenを使用する場合、この構成はソースツリーに保持され、テストの実行時に適用されます。 Maven Surefire Plugin のドキュメントを参照してください。

72
ptomli

パラメータはその場で設定することもできます。

mvn test -DargLine="-Dsystem.test.property=test"

http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html を参照してください

21
vpathak

これらの設定を配布する簡単な方法はないと言っている他の人たちに同意します。

Eclipseの場合:同僚に次の設定を依頼してください。

  • Windowsの設定/ Java /インストールされたJRE:
  • 適切なJRE/JDKを選択します(またはそれらすべてに対して行います)
  • 編集
  • デフォルトのVM引数:-Xmx1024m
  • 完了、OK。

その後、すべてのテストは-Xmx1024mで実行されますが、残念ながら、すべてのEclipseインストールでそれを設定しました。たぶん、この設定を含むカスタムEclipseパッケージを作成して、同僚に渡すことができます。

次の作業プロセスも役立ちます:IDEがテストを実行できない場合、開発者はMavenがこのテストを実行できるかどうかを確認する必要があります。

  • Maven 実行できたの場合、通常、失敗の原因は開発者のIDEの設定です。開発者はこれらの設定を確認する必要があります。
  • Mavenも実行できなかったテストの場合、開発者は失敗の原因がIDEではないことを知っているため、IDEを使用してテストをデバッグできます。
13
palacsint

このサポートの質問によると https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-

intelliJ junitテスト実行の-Xmx引数は、設定されている場合、maven-surefire-pluginから取得されます。

このpom.xmlスニペット

        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-Xmx1024m</argLine>
            </configuration>
        </plugin>

intelliJ 2016.2.4では、-Xmx1024引数をjunitテスト実行に渡すようです。

12
Mark K.

SystemPropertyVariablesを使用できます(Java.protocol.handler.pkgsはJVM引数名です):

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
        <systemPropertyVariables>
            <Java.protocol.handler.pkgs>com.zunix.base</Java.protocol.handler.pkgs>
            <log4j.configuration>log4j-core.properties</log4j.configuration>
        </systemPropertyVariables>
    </configuration>
</plugin>

http://maven.Apache.org/surefire/maven-surefire-plugin/examples/system-properties.html

2
sendon1982

Java.library.path JVMパラメーターに限定されたEclipse固有の代替手段により、別の応答で提案されているjdk全体ではなく、特定のソースフォルダーに設定することができます。

  1. 起動するプログラムが存在するソースフォルダーを選択します(通常はsource/test/Java)
  2. alt Enterと入力して、そのフォルダーの[プロパティ]ページを開きます
  3. 左パネルでネイティブを選択
  4. ネイティブパスを編集します。パスはワークスペースに対して絶対パスまたは相対パスにすることができ、2番目のパスはより変化に強いです。

SystemPropertiesタグよりもmaven arglineタグを優先する理由について詳しく知りたい場合は、次の例をご覧ください。

Mavenテスト(lwjgl)でネイティブJNIファイルを取得

1
paswar