いくつかの単体テストを実行するために Nant ビルド スクリプトを変更しています。ローカルで実行されるテストと、チーム シティで実行されるテストのターゲットが異なります。
<target name="run-unit-tests">
<property name="test.executable" value="tools\nunit\nunit-console.exe"/>
<call target="do-unit-tests"/>
</target>
<target name="run-unit-tests-teamcity">
<property name="test.executable" value="${teamcity.dotnet.nunitlauncher}"/>
<call target="do-unit-tests"/>
</target>
ターゲットのdo-unit-testsで、次のようにプロパティを設定し、NCover を呼び出してコード カバレッジを実行することで、どのテスト アセンブリを実行するかを設定しました。
<target name="do-unit-test">
<property name="test.assemblies" value="MyProject.dll">
<call target="do-unit-test-coverage" />
</target>
<target name="do-unit-test-coverage">
<ncover <!--snip -->
commandLineArgs="${test.args}"
<!--snip-->
</ncover>
</target>
ncover 部分でわかるように、"test.args"というプロパティが必要です。このプロパティは「test.assemblies」に依存します
すなわち:<property name="test.args" value="${test.assemblies} <!--snip -->" />
test.args は、ローカルで実行される単体テストとチーム シティで実行される単体テストとで異なる方法で設定する必要があるため、これを設定する方法を見つけようとしています。
プロパティ "test.assemblies" の後に "do-unit-test" に test.args のプロパティを配置すると、do-unit-test が run-unit-tests によって呼び出され、別の test.args によって呼び出される場合、1 つの test.args を指定できません。 run-unit-tests-teamcity 用。
「do-unit-test」で次のようなことをやろうとしています:
<if test="${target::exists('run-unit-tests-teamcity')}">
<property name="test.args" value="..." />
</if>
しかし、ターゲットが常に存在するため、明らかにそれは機能しません。
次に、現在のターゲットdo-unit-testがrun-unit-tests-teamcityによって呼び出されたかどうかをテストしたいと思います
これは可能ですか?Nant のドキュメントに表示されませんか? そこにないので、それは将来の機能になるか、Nant ビルド スクリプトでどのように指定されているかを理解していないことを意味します。