私はAntにはあまり向いていませんが、ビルドツールとして使用しています。今、「ant test」を実行でき、すべての単体テストを実行します。
ただし、ant test some_module
とsome_module
をパラメーターとして使用し、それのみをテストします。
コマンドライン引数をAntに渡す方法を見つけることができませんでした-アイデアはありますか?
1つの解決策は次のとおりです。 (これを行うプロジェクトがあります。)
テストを1つのクラスのみに制限するtest
を持つfileset
に似た別のターゲットを用意します。次に、antコマンドラインで-D
を使用してそのクラスの名前を渡します。
ant -Dtest.module=MyClassUnderTest single_test
Build.xmlで(大幅に削減):
<target name="single_test" depends="compile" description="Run one unit test">
<junit>
<batchtest>
<fileset dir="${test.dir}" includes="**/${test.module}.class" />
</batchtest>
</junit>
</target>
テストターゲットでいくつかの条件を使用し、-Dcondition=true
?
<target name="test" depends="_test, _test_if_true>
...
</target>
<target name="_test_if_true" if="condition">
...
</target>
<target name="_test" unless="condition">
...
</target>
ant faq から少し変更しました。
オプションのデフォルト値を使用してプロパティを定義することもできます。デフォルト値は、コマンドラインを介して置き換えることができます。
<target name="test">
<property name="moduleName" value="default-module" />
<echo message="Testing Module: ${moduleName}"/>
....
</target>
そして次のように実行します:
ant test -DmoduleName=ModuleX
Antを呼び出すときに、コマンドラインでプロパティを定義できます。
ant -Dtest.module=mymodulename
次に、他のantプロパティとして使用できます。
...
<fileset dir="${test.dir}" includes="**/${test.module}.class" />
...
Antのマニュアル をご覧ください。
これを試して、一度に1つのターゲットにアクセスできます。これらの行をbuild.xmlファイルに追加します。
<project name="whatever" default="default">
<input message="Please select module:" addproperty="mod" />
<target name="default" depends="${mod}/>
...
</project>
これにより、build.xml全体を実行する代わりに、実行するモジュールを入力して、それ自体を実行できます。
これを完全に機能させるには、build.xmlをさらに変更する必要がある場合があります。
まったく同じ元の質問に対して、ここに投稿された解決策を試しました。はい、単にant -D<arg_name>
を使用します。 -D
は私が推測する「キーワード」です。私はアリの専門家ではなく、マニュアルを詳しく読んでいません。その後、ant XMLファイル内で次のようにアクセスできます:${arg_name}
たとえば、arg.myarg
のような引数名を持つことができます。したがって、XMLでは${arg.myarg}
です。
あなたのプロジェクトModuleXとModuleYに2つのモジュールがあり、ModuleXには2つのテストケースがあり、ModuleYには10のテストケースがあると言わないでください。
次のようなことができます:
ant runTestsOnModule -Dtestmodule="ModuleX"
OR to test all modules by calling
ant tests
<target name="runTestsOnModule">
<antCall target="testcase${testmodule}"/>
</target>'
<! -- run single module -->
<target name="runTestsOnModule">
<antCall target="testcase${testmodule}"/>
</target>
<!--run all tests-->
<target name="tests">
<antcall target="testcaseModuleX">
<antcall target="testCaseModuleY">
</target>
<target name="testcaseModuleX">
..run junit task to call 2 testcase
</target>
<target name="testcaseModuleY">
....run junit task to call 10 testcase
</target>
Antには、ビルドファイル用のparameters_はありません。これを行ういくつかの方法を考えることができます。
<for/>
タスクを使用して、複数のテストを指定できます。 Ant-Contrib jarファイルをダウンロードする必要があります。プロジェクト内の `$ {basedir}/antlib/antcontrib"ディレクトリの下に置くことをお勧めします。そうすれば、他の人があなたのプロジェクトをチェックアウトするときに、必要なAnt-Contrib jarファイルを取得できます。<property name="antlib.dir" value="${basedir}/antlib"/>
<property name="antcontrib.dir" value="${antlib}/antcontrib"/>
<!-- Set up the ant contrib tasks for your use -->
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<fileset dir="${antcontrib.dir}"/>
</classpath>
</taskdef>
<target name="select-test"
description="Select the tests to run"
depends="test-compile"
if="junit-tests">
<for parameter="module"
list="${junit-tests}"
delimiter=" ">
<sequential>
<junit
fork="true"
...>
<batchtest todir="$target/unit-tests">
<fileset dir="${test.destdir}">
<include name="**/@{module}.class"/>
</fileset>
</junit>
</sequential>
</for>
</target>
ここで、次のような複数のテストを実行します。
$ ant -D"test-one test-two test-three" select-test
引数には、プロパティと呼ばれる機能があります。プロパティを設定する必要があります。 ANTのように、単純な引数がターゲット名として使用されます。