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


95

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

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

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

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

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


それが実現可能であるとは思えません。マシン全体で、特定のIDEの場合、それは実現可能でなければなりません。しかし、IDE全体で、その方法はわかりません。
JBニゼット2009

@JBNizet-特定のIDE(Intellij IDEAが提供されている場合)のマシンを横取りさせていただきます。
amaidment '28 / 09/28

回答:


48

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

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

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

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

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


実行/デバッグ構成はどこにありますか?テストを実行したときに、設定またはコンテキストメニューにこれが表示されません。
ディーンヒラー

2
これは既存のJUnit実行構成を変更しないことに注意してください。デフォルトを変更した後に作成される構成のみです。既存のものを手動で変更する必要があります。
MikeFHay 2016

78

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プラグインのドキュメントを参照してください。


1
@ptomli-「確かに...」で始まるコメントはいつも信用しない。Intellij Maven統合は、Mavenビルドサイクルでタスクを実行するときにpomプラグイン構成を使用します。IDEでの単体テストの実行は別のプロセスであり、デフォルトではビルドプロセスの知識はありません。私の知る限り、これらを接続する方法はありません-私は別の方法で教えられてうれしいですが。これは、あなたが知っている、または行ったことです-その場合、それを行う方法を共有できますか?
amaidment '28 / 09/28

1
Intellijでそれが可能かどうかはわかりません。TBH、たとえそうだったとしても、私はそのアプローチを使いたくありません。IDEでユニットテストを実行している場合は、IDEデバッガーを利用したいと思う可能性があるためです。 mvnテストを実行する。
amaidment '28 / 09/11

5
実際、IntelliJのMaven統合、個々の単体テストを実行するときにMaven Surefire構成を使用します。上記のMaven設定を使用-Xmx256Mすると、ユニットテストをIntelliJから直接実行するときにJavaコマンドラインに渡されます。これはちょうど私を混乱させました:-(
Kkkev

1
参考:Netbeansもテストの実行にMaven Suefireを使用しています
Ferrybig

1
@Kkkev IntelliJのMaven統合は、IntelliJでの個別のテストの実行とは異なります。1つ目はMaven実行構成を使用する(したがって、引数を読み取る)、2つ目はJUnit、TestNG ...構成を使用します。
andresp


14

このサポート質問によると 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で、junitテスト実行に-Xmx1024引数を渡すようです。


13

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

Eclipseの場合:同僚に以下の設定を依頼します。

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

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

IDEがテストを実行できない場合、開発者はMavenがこのテストを実行できるかどうかを確認する必要があります。

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

プロジェクトがmavenでビルドする必要があると言ってもあまり役に立ちません。(私たちはmavenでのみ構築しています。)ただし、あなたの提案では暗黙的に、mavenビルドサイクルの一部としてのみテストを実行する必要があります。IDEでのデバッグには、同じテストを使用することがよくあります。(デバッグが
完了


2

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


1

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

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

maven arglineタグをsystemPropertiesタグよりも優先する必要がある理由の詳細に興味がある人は、たとえば次のように見てください。

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.