このタスクは、JUnitテストフレームワークのテストを実行します。フレームワークの最新バージョンは、https://junit.dokyumento.jp にあります。このタスクは、JUnit 3.0 から JUnit 3.8.2 まででテストされています。JUnit 3.0 より前のバージョンでは動作しません。また、JUnit 4.x でも動作し、アノテーションのみを使用し、JUnit4TestAdapter
を使用しない「純粋な」JUnit 4 テストも含まれます。
注: このタスクは、Apache Ant ディストリビューションに含まれていない外部ライブラリに依存しています。詳細については、ライブラリの依存関係 を参照してください。
注: このタスクまたはこのタスクによって起動されるテスト、あるいはテストで使用されるライブラリが、java.lang.System.exit()
や java.lang.Runtime.exit()
などの API を呼び出す場合は、fork=true
を設定する必要があります。
注: junit.jar が利用可能である必要があります。以下のいずれかを実行できます。
ANT_HOME/lib
に配置します。ANT_HOME/lib
に配置せず、代わりにそれらの場所を CLASSPATH
環境変数に含めます。<taskdef>
内の <classpath>
要素を使用して、両方の JAR の場所を指定します。ANT_HOME/lib
のデフォルトの場所に置いたまま、<junit>
に渡される <classpath>
に junit.jar を含めます。Ant 1.7 以降詳細については、FAQ を参照してください。
テストは、ネストされた test
または batchtest
タグによって定義されます(ネストされた要素 を参照)。
属性 | 説明 | 必須 |
---|---|---|
printsummary | 各テストケースの 1 行の統計情報を表示します。on、 off、 withOutAndErrの値を取ることができます。 withOutAndErrは onと同じですが、 System.out と System.err に書き込まれたテストの出力を含みます。 |
いいえ。デフォルトは offです。 |
fork | 別の JVM でテストを実行します。 | いいえ。デフォルトは offです。 |
forkmode | 一部のテストをフォークする場合に、いくつの JVM が作成されるかを制御します。可能な値は、perTest(デフォルト)、 perBatch、 onceです。 onceはすべてのテストに対して単一の JVM のみを作成しますが、 perTestは各 TestCase クラスに対して新しい JVM を作成します。 perBatchは、ネストされた各 <batchtest> に対して JVM を作成し、ネストされたすべての <test> を収集する 1 つの JVM を作成します。filtertrace、haltonerror、haltonfailure、errorproperty、failureproperty の設定が同じテストのみが JVM を共有できるため、forkmode を onceに設定しても、Ant は複数の JVM を作成する必要がある場合があります。この属性は、新しい JVM にフォークされないテストでは無視されます。Ant 1.6.2 以降 |
いいえ。デフォルトは perTestです。 |
haltonerror | テストの実行中にエラーが発生した場合、ビルドプロセスを停止します。 | いいえ。デフォルトは offです。 |
errorproperty | エラーが発生した場合に設定するプロパティの名前。 | いいえ |
haltonfailure | テストが失敗した場合(エラーも失敗とみなされます)、ビルドプロセスを停止します。 | いいえ。デフォルトは offです。 |
failureproperty | 失敗した場合に設定するプロパティの名前(エラーも失敗とみなされます)。 | いいえ |
filtertrace | エラーおよび失敗のスタックトレースから JUnit および Ant のスタックフレームを除外します。 | いいえ。デフォルトは onです。 |
timeout | 指定された時間(ミリ秒単位)内に終了しない場合、個々のテストをキャンセルします。fork が offの場合は無視されます。同じ JVM 内で複数のテストを実行する場合(forkMode を参照)、timeout は個々のテストではなく、すべてのテストが一緒に使用する時間に適用されます。 |
いいえ |
maxmemory | フォークされた JVM に割り当てる最大メモリ量。fork が offの場合は無視されます。注: 一部のテストで java.lang.OutOfMemoryError: Java heap space が発生した場合は、maxmemory=128mのようにサイズを増やす必要があります。 |
いいえ |
jvm | JVM の起動に使用されるコマンド。コマンドは java.lang.Runtime.exec() によって解決されます。 |
いいえ。デフォルトは java で、fork が falseの場合は無視されます。 |
dir | JVM を起動するディレクトリ。 | いいえ、fork が falseの場合は無視されます。 |
newenvironment | 新しい環境変数が指定されている場合、古い環境を伝播しません。 | いいえ。デフォルトは falseで、fork が falseの場合は無視されます。 |
includeantruntime | テストと JUnit を実行するために必要な Ant クラスを、フォークモードでクラスパスに暗黙的に追加します。 | いいえ。デフォルトはtrueです。 |
showoutput | テストによって生成された出力を、フォーマッタだけでなく、Ant のロギングシステムにも送信します。 | いいえ。デフォルトでは、フォーマッタのみが出力を受け取ります。 |
outputtoformatters | テストによって生成された出力をテストフォーマッタに送信します。*Ant 1.7.0 以降*。 | いいえ。デフォルトはtrueです。 |
tempdir | Ant が一時ファイルを配置する場所。*Ant 1.6 以降*。 | いいえ。デフォルトはプロジェクトの basedir です。 |
reloading | 各テストケースに対して新しいクラスローダーをインスタンス化するかどうか。 fork が trueに設定されている場合は無視されます。*Ant 1.6 以降*。 |
いいえ。デフォルトは true です。 |
clonevm | trueに設定すると、フォークされた JVM のすべてのシステムプロパティと bootclasspath は、Ant を実行している JVM と同じになります。*Ant 1.7 以降* |
いいえ。デフォルトは falseで、fork が falseの場合は無視されます。 |
logfailedtests | Ant が複数のテストを実行し、エラーまたは失敗で停止しない場合、失敗した各テストの「FAILED」メッセージをロギングシステムに記録します。このオプションを falseに設定すると、メッセージはログに記録されず、失敗したテストを見つけるためにフォーマッタ出力に頼る必要があります。*Ant 1.8.0 以降* |
いいえ |
enableTestListenerEvents | Ant が、実行中のテストに関する詳細な情報を、詳細レベルで Ant のロギングシステムに送信するかどうか。このようなイベントは、カスタムテストリスナーがテストの進行状況を表示するために使用できます。 *Ant 1.8.2 以降*—**Ant 1.7.0 から 1.8.1 までは、この属性がデフォルトで trueであるかのように動作します。** |
いいえ。デフォルトは falseで、マジックプロパティ でオーバーライドできます。 |
threads | テストを実行するスレッドの数。 この属性が指定されている場合、テストはスレッド間で任意に分割されます。 有効にするには、 perTestオプションを使用してテストをフォークする必要があります。 Ant 1.9.4 以降 |
いいえ |
errorproperty 属性と failureproperty 属性を使用することにより、セットアップ作業(外部サーバーの起動など)を実行し、テストを実行し、クリーンアップを行い、それでも失敗した場合にビルドを失敗させることができます。
filtertrace 属性は、エラーと失敗のスタックトレースを報告する前に圧縮します。プレーンフォーマッタと XML フォーマッタの両方で動作します。次の文字列パターンで始まる行はすべて除外されます。
"junit.framework.TestCase" "junit.framework.TestResult" "junit.framework.TestSuite" "junit.framework.Assert." "junit.swingui.TestRunner" "junit.awtui.TestRunner" "junit.textui.TestRunner" "java.lang.reflect.Method.invoke(" "sun.reflect." "org.apache.tools.ant." "org.junit." "junit.framework.JUnit4TestAdapter" " more"
<junit>
タスクは、パスのような構造 を表すネストされた <classpath>
要素をサポートしています。
*Ant 1.7 以降*、このクラスパスは、テストとテスト対象のコードだけでなく、junit.jar を参照するためにも使用できます。
fork が true
の場合、ネストされた <jvmarg>
要素を介して新しい JVM に追加のパラメータを渡すことができます。例えば
<junit fork="yes"> <jvmarg value="-Dfoo=bar"/> ... </junit>
は、JIT なしで JVM でテストを実行します。
<jvmarg>
は、コマンドライン引数 で説明されているすべての属性を許可します。
ネストされた <sysproperty>
要素を使用して、クラスに必要なシステムプロパティを指定します。これらのプロパティは、テストの実行中(Ant の JVM または fork=true
の場合はフォークされた JVM)に JVM で使用できるようになります。この要素の属性は、環境変数 の属性と同じです。
<junit fork="no"> <sysproperty key="basedir" value="${basedir}"/> ... </junit>
は、Ant の JVM でテストを実行し、basedir
プロパティをテストで使用できるようにします。
Ant 1.6 以降
syspropertyset を使用して、システムプロパティとして使用するプロパティのセットを指定できます。
ネストされた <env>
要素を介して、フォークされた JVM に渡す環境変数を指定できます。<env>
要素の属性の説明については、exec タスクの説明を参照してください。
fork=false
の場合、設定は無視されます。
Ant 1.6 以降.
ブートストラップクラスファイルの場所は、この パスのような構造 を使用して指定できます。fork が false
の場合、またはターゲット JVM がそれをサポートしていない場合(つまり Java 1.1)は無視されます。
Ant 1.6 以降.
注:
この要素は、Java 18 以降のバージョンで実行されている場合はサポートされなくなりました。詳細については、permissions を参照してください。
ネストされた permissions
要素を介して、クラスの実行中にセキュリティパーミッションを取り消したり、付与したりできます。詳細については、permissions を参照してください。
fork=true
の場合、設定は無視されます。
Ant 1.6 以降.
<assertions>
サブ要素を使用して、Java 1.4 アサーションの有効化を制御できます。
アサーションステートメントは、現在、非フォークモードでは無視されます。
Ant 1.9.8 以降
モジュールの場所は、この パスのような構造 を使用して指定できます。modulepath
を使用するには、fork を true
に設定する必要があります。
Ant 1.9.8 以降
ランタイムイメージでアップグレード可能なモジュールを置き換えるモジュールの場所は、この パスのような構造 を使用して指定できます。upgrademodulepath
を使用するには、fork を true
に設定する必要があります。
テストの結果は、さまざまな形式で出力できます。usefile 属性を false
に設定しない限り、出力は常にファイルに送信されます。ファイルの名前はテストの名前によって決まり、<test>
の outfile 属性によって設定できます。
定義済みのフォーマッタは 4 つあります。1 つはテスト結果を XML 形式で出力し、もう 1 つはプレーンテキストで出力します。brief
という名前のフォーマッタは、失敗したテストケースの詳細情報のみを出力しますが、plain
はすべてのテストケースの簡単な統計行を出力します。org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatter
を実装する必要があるカスタムフォーマッタを指定できます。
XML フォーマッタを使用する場合、テストが出力したものと同じ出力が含まれない場合があります。これは、一部の文字が XML ドキュメントでは不正であり、削除されるためです。
failure
という名前の 4 番目のフォーマッタ(*Ant 1.8.0 以降*)は、失敗したすべての testXXX()
メソッドを収集し、これらの失敗したメソッドのみを委任する新しい TestCase
を作成します。名前と場所は、Java システムプロパティまたは Ant プロパティ ant.junit.failureCollector
で指定できます。値は、結果のクラスのディレクトリと名前(サフィックスなし)を指している必要があります。デフォルトは java-tmp-dir/FailedTests です。
属性 | 説明 | 必須 |
---|---|---|
type | 定義済みのフォーマッタ(xml、 plain、 brief、または failure)を使用します。 |
これらのいずれか 1 つ |
classname | カスタムフォーマッタクラスの名前。 | |
extension | 出力ファイル名に追加する拡張子。 | classname が使用されている場合は必須 |
usefile | 出力をファイルに送信するかどうかを決定するブール値。 | いいえ。デフォルトはtrueです。 |
if | 指定されたプロパティが設定されている場合にのみフォーマッタを使用します。 | いいえ。デフォルトはtrueです。 |
unless(もし指定プロパティが設定されていない場合) | 指定されたプロパティが設定されていない場合にのみ、フォーマッタを使用します (if+unlessプロパティ参照)。 | いいえ。デフォルトはtrueです。 |
単一のテストクラスを定義します。
属性 | 説明 | 必須 |
---|---|---|
name(名前) | テストクラスの名前。 | 必須 |
methods(メソッド) | 実行するテストケースメソッド名のカンマ区切りリスト。1.8.2以降で利用可能 methods属性は、以下のシナリオで役立ちます。
methods 属性が使用されているが、テストメソッドが指定されていない場合、スイートのテストメソッドは実行されません。 |
省略可能; デフォルトはスイート内のすべてのテストメソッドを実行することです。 |
fork | 別のJVMでテストを実行します。<junit> で設定された値をオーバーライドします。 |
いいえ |
haltonerror | テスト実行中にエラーが発生した場合、ビルドプロセスを停止します。<junit> で設定された値をオーバーライドします。 |
いいえ |
errorproperty | エラーが発生した場合に設定するプロパティの名前。<junit> で設定された値をオーバーライドします。 |
いいえ |
haltonfailure | テストが失敗した場合(エラーも失敗とみなされます)、ビルドプロセスを停止します。<junit> で設定された値をオーバーライドします。 |
いいえ |
failureproperty | 失敗した場合(エラーも失敗とみなされます)に設定するプロパティの名前。<junit> で設定された値をオーバーライドします。 |
いいえ |
filtertrace | エラーおよび失敗のスタックトレースからJUnitおよびAntのスタックフレームを除外します。<junit> で設定された値をオーバーライドします。 |
いいえ。デフォルトは onです。 |
todir(出力ディレクトリ) | レポートを書き込むディレクトリ。 | 省略可能; デフォルトはカレントディレクトリです。 |
outfile(出力ファイル) | テスト結果のベース名。完全なファイル名は outfile.formatter となります。 | 省略可能; デフォルトは TEST-name です。 |
if | 指定されたプロパティが設定されている場合にのみ、テストを実行します (if+unlessプロパティ参照)。 | いいえ |
unless(もし指定プロパティが設定されていない場合) | 指定されたプロパティが設定されていない場合にのみ、テストを実行します (if+unlessプロパティ参照)。 | いいえ |
skipNonTests(テストを含まないクラスをスキップ) | JUnitテストを含まないクラスをテストランナーに渡さないようにします。これにより、テスト結果にテスト以外のものがテストエラーとして表示されるのを防ぎます。 テストは、`junit.framework.TestCase` を拡張しない具象クラスのメソッドに `@Test` アノテーションがあるか、`junit.framework.TestCase` を拡張する具象クラスに "test" で始まる名前のpublic/protectedメソッドがあることで識別されます。JUnit 4 の `org.junit.runner.RunWith` または `org.junit.runner.Suite.SuiteClasses` アノテーションが付いたクラスも、public/protectedで引数のない `suite()` メソッドを持つクラスと同様に、JUnitに渡されて実行されます。 |
省略可能; デフォルトは「false」です。 |
テストは、ネストされた <formatter>
要素を介して独自のフォーマッタを定義できます。
パターンマッチングに基づいて複数のテストを定義します。
batchtest
は、ネストされた任意の数のリソースコレクションから含まれるリソースを収集します。そして、.java または .class で終わる各リソースのテストクラス名を生成します。
ネストされた要素として、あらゆる種類のリソースコレクションがサポートされています。Ant 1.7より前は、<fileset>
のみがサポートされていました。
属性 | 説明 | 必須 |
---|---|---|
fork | 別のJVMでテストを実行します。<junit> で設定された値をオーバーライドします。 |
いいえ |
haltonerror | テスト実行中にエラーが発生した場合、ビルドプロセスを停止します。<junit> で設定された値をオーバーライドします。 |
いいえ |
errorproperty | エラーが発生した場合に設定するプロパティの名前。<junit> で設定された値をオーバーライドします。 |
いいえ |
haltonfailure | テストが失敗した場合(エラーも失敗とみなされます)、ビルドプロセスを停止します。<junit> で設定された値をオーバーライドします。 |
いいえ |
failureproperty | 失敗した場合(エラーも失敗とみなされます)に設定するプロパティの名前。<junit> で設定された値をオーバーライドします。 |
いいえ |
filtertrace | エラーおよび失敗のスタックトレースからJUnitおよびAntのスタックフレームを除外します。<junit> で設定された値をオーバーライドします。 |
いいえ。デフォルトは onです。 |
todir(出力ディレクトリ) | レポートを書き込むディレクトリ。 | 省略可能; デフォルトはカレントディレクトリです。 |
if | 指定されたプロパティが設定されている場合にのみ、テストを実行します (if+unlessプロパティ参照)。 | いいえ |
unless(もし指定プロパティが設定されていない場合) | 指定されたプロパティが設定されていない場合にのみ、テストを実行します (if+unlessプロパティ参照)。 | いいえ |
skipNonTests(テストを含まないクラスをスキップ) | JUnitテストを含まないクラスをテストランナーに渡さないようにします。これにより、テスト結果にテスト以外のものがテストエラーとして表示されるのを防ぎます。 テストは、`junit.framework.TestCase` を拡張しない具象クラスのメソッドに `@Test` アノテーションがあるか、`junit.framework.TestCase` を拡張する具象クラスに "test" で始まる名前のpublic/protectedメソッドがあることで識別されます。JUnit 4 の `org.junit.runner.RunWith` または `org.junit.runner.Suite.SuiteClasses` アノテーションが付いたクラスも、public/protectedで引数のない `suite()` メソッドを持つクラスと同様に、JUnitに渡されて実行されます。 |
省略可能; デフォルトは「false」です。 |
バッチテストは、ネストされた<formatter>
要素を介して独自のフォーマッタを定義できます。
tearDown()
フォークされたテストがタイムアウトになった場合、Ant は作成した JVM プロセスを終了します。これは、テストの tearDown()
メソッドが呼び出されない可能性があることを意味します。フォークされた JVM が他の理由でクラッシュした場合も同様です。
Ant 1.8.0以降、Ant には、フォークされた JVM にあったテストケースを読み込んで、そのクラスの tearDown()
メソッドを呼び出そうとする特別なフォーマッタが付属しています。このフォーマッタには、以下の制限があります。
perTest以外の forkMode では動作せず、テストクラスに
suite()
メソッドが含まれている場合は何も実行しません。フォーマッタが互換性のない forkMode または suite()
メソッドを認識するか、テストクラスの読み込みに失敗した場合、サイレントに何も実行しません。
フォーマッタは、フォークされていないテスト、またはタイムアウトや JVM クラッシュを引き起こさなかったテストには影響しません。
フォーマッタを有効にするには、次のような formatter
を追加します。
<formatter classname="org.apache.tools.ant.taskdefs.optional.junit.TearDownOnVmCrash" usefile="false"/>
を junit
タスクに追加します。
ant.junit.enabletestlistenerevents
マジックプロパティAnt 1.8.2以降、タスクの enableTestListenerEvents 属性は、きめ細かいログメッセージがタスクの詳細ログに送信されるかどうかを制御します。この属性に加えて、Ant はプロパティ ant.junit.enabletestlistenerevents
を参照し、プロパティの値は属性の設定をオーバーライドします。
このプロパティは、追加のロギングイベントに依存する Ant を実行しているコンテナが、ビルドファイルで無効になっている場合でも、それらが生成されることを保証できるようにするために存在します。
同じ VM で my.test.TestCase
に定義されたテストを実行します。テストが失敗しない限り、出力は生成されません。
<junit> <test name="my.test.TestCase"/> </junit>
別の JVM で my.test.TestCase
に定義されたテストを実行します。テストの最後に、1 行のサマリーが出力されます。テストの詳細なレポートは、TEST-my.test.TestCase.txt にあります。テストが失敗すると、ビルドプロセスは停止します。
<junit printsummary="yes" fork="yes" haltonfailure="yes"> <formatter type="plain"/> <test name="my.test.TestCase"/> </junit>
指定された CLASSPATH
を無視して、同じ JVM で my.test.TestCase
を実行します。このテストが失敗した場合、警告のみが出力されます。プレーンテキストのテスト結果に加えて、このテストの XML 結果が result.xml に出力されます。次に、${src.tests} に定義されたディレクトリ内の一致するファイルごとに、別の JVM でテストが実行されます。テストが失敗すると、ビルドプロセスは中止されます。結果は TEST-name.txt という名前のファイルに収集され、${reports.tests} に書き込まれます。
<junit printsummary="yes" haltonfailure="yes"> <classpath> <pathelement location="${build.tests}"/> <pathelement path="${java.class.path}"/> </classpath> <formatter type="plain"/> <test name="my.test.TestCase" haltonfailure="no" outfile="result"> <formatter type="xml"/> </test> <batchtest fork="yes" todir="${reports.tests}"> <fileset dir="${src.tests}"> <include name="**/*Test*.java"/> <exclude name="**/AllTests.java"/> </fileset> </batchtest> </junit>
最初の実行では、すべてのテストは <batchtest/>
要素を介して収集されます。その plain フォーマッタは、コンソールに出力を表示します。failure フォーマッタは、${build.dir}/failingTests/FailedTests.java に junit.framework.TestCase
を拡張し、suite()
メソッドから失敗したテストのテストスイートを返す Java ソースファイルを作成します。
2 回目の実行では、コレクタクラスが存在し、<batchtest/>
の代わりに単一の <test/>
が実行されます。そのため、失敗したテストケースのみが再実行されます。2 つのネストされたフォーマッタは、(ユーザー向けに)表示するためと、コレクタクラスを更新するためのものです。
<target name="test"> <property name="collector.dir" value="${build.dir}/failingTests"/> <property name="collector.class" value="FailedTests"/> <!-- Delete 'old' collector classes --> <delete> <fileset dir="${collector.dir}" includes="${collector.class}*.class"/> </delete> <!-- compile the FailedTests class if present --> <javac srcdir="${collector.dir}" destdir="${collector.dir}"/> <available file="${collector.dir}/${collector.class}.class" property="hasFailingTests"/> <junit haltonerror="false" haltonfailure="false"> <sysproperty key="ant.junit.failureCollector" value="${collector.dir}/${collector.class}"/> <classpath> <pathelement location="${collector.dir}"/> </classpath> <batchtest todir="${collector.dir}" unless="hasFailingTests"> <fileset dir="${collector.dir}" includes="**/*.java" excludes="**/${collector.class}.*"/> <!-- for initial creation of the FailingTests.java --> <formatter type="failure"/> <!-- I want to see something ... --> <formatter type="plain" usefile="false"/> </batchtest> <test name="FailedTests" if="hasFailingTests"> <!-- update the FailingTests.java --> <formatter type="failure"/> <!-- again, I want to see something --> <formatter type="plain" usefile="false"/> </test> </junit> </target>
platform.java
プロパティで指定されたフォークされた JVM で、my.test.TestCase
をホワイトボックステストとして実行します。JUnit ライブラリは無名モジュールの一部であり、テスト対象のプロジェクトと必要なモジュールはモジュールパス上にあります。テストには module-info ファイルがなく、`module.name` プロパティで指定されたプロジェクトモジュールで実行されます。
--patch-module Java オプションは、${build.test.classes} に組み込まれたテストを、`module.name` プロパティで指定されたモジュールで実行します。
--add-modules Java オプションは、テスト対象のモジュールを有効にします。
--add-reads Java オプションは、JUnit を含む無名モジュールをテスト対象モジュールから読み取り可能にします。
--add-exports Java オプションは、エクスポートされていないテストパッケージ `my.test` を、JUnit を含む無名モジュールからアクセスできるようにします。
<junit fork="true" jvm="${platform.java}"> <jvmarg line="--patch-module ${module.name}=${build.test.classes}"/> <jvmarg line="--add-modules ${module.name}"/> <jvmarg line="--add-reads ${module.name}=ALL-UNNAMED"/> <jvmarg line="--add-exports ${module.name}/my.test=ALL-UNNAMED"/> <classpath> <pathelement path="${libs.junit}"/> </classpath> <modulepath> <pathelement path="${modules}:${build.classes}"/> </modulepath> <formatter type="plain"/> <test name="my.test.TestCase"/> </junit>
platform.java
プロパティで指定されたフォークされた JVM で、`my.test.TestCase` をブラックボックステストとして実行します。JUnit ライブラリは自動モジュールとして使用されます。テストの module-info は、テスト対象モジュールと JUnit を必要とします。
--add-modules Java オプションは、テストモジュールを有効にします。
--add-exports Java オプションは、エクスポートされていないテストパッケージ `my.test` を JUnit モジュールと Ant のテストランナーからアクセスできるようにします。別の方法として、テストの module-info で `exports my.test` ディレクティブを使用してテストパッケージをエクスポートすることもできます。
<junit fork="true" jvm="${platform.java}"> <jvmarg line="--add-modules ${test.module.name}"/> <jvmarg line="--add-exports ${test.module.name}/my.test=junit,ALL-UNNAMED"/> <modulepath> <pathelement path="${modules}:${build.classes}:${libs.junit}"/> </modulepath> <formatter type="plain"/> <test name="my.test.TestCase"/> </junit>