對於配料的@(UnitTestProjects)
你的目標將不得不使用這樣的:
<Target Name="Coverage">
<NCover TestRunnerExe="C:\Program Files\NUnit 2.5.8\bin\net-2.0\nunit-console.exe"
TestRunnerArgs=""%(UnitTestProjects.Identity)" "%(UnitTestProjects.Identity)""
<!--
If you receive the Task Output (*Test.dll) you will have to extract
the working dir path
-->
WorkingDirectory="C:\SomeProject\bin\"
AppendTrendTo="coverage.trend"
OnlyAssembliesWithSource="True"
<!--
... the same thing applies to finding out the current project name
from your Task Ouput.
-->
ProjectName="SomeProjectCoverage" />
</Target>
更可靠的解決方案是,提供TaskItems的名單,持股約你的(測試)項目的元數據。
<ItemGroup>
<TestProject Include="MyProject1.Test.dll">
<TestProjectName>MyProject1</TestProjectName>
<MyTestProjectWorkingDir>C:\MyProject1\bin</MyTestProjectWorkingDir>
</TestProject>
<TestProject Include="MyProject2.Test.dll">
<TestProjectName>MyProject2</TestProjectName>
<MyTestProjectWorkingDir>C:\MyProject2\bin</MyTestProjectWorkingDir>
</TestProject>
</ItemGroup>
<Target Name="Coverage">
<NCover TestRunnerExe="C:\Program Files\NUnit 2.5.8\bin\net-2.0\nunit-console.exe"
TestRunnerArgs=""%(TestProject.Identity)" "%(TestProject.Identity)""
WorkingDirectory="%(TestProject.MyTestProjectWorkingDir)"
AppendTrendTo="coverage.trend"
OnlyAssembliesWithSource="True"
ProjectName="%(TestProject.MyTestProjectName)" />
</Target>
你的問題建議您正在尋找一個自動化的方法,這將允許你添加新的測試項目,而無需保持TaskItems的配置列表。
因爲要提取餵養NCover Task所需的所有信息可能相當困難,可能半自動化方法可能適用於您。
你可以導入添加到您的測試項目,將養活你的全球測試項目的ItemGroup:
<ItemGroup>
<!-- add existing ItemGroup -->
<TestProject Include="@(TestProject)" />
<!-- add project itself -->
<TestProject Include="MyProject1.Test.dll">
<TestProjectName>MyProject1</TestProjectName>
<MyTestProjectWorkingDir>C:\MyProject1\bin</MyTestProjectWorkingDir>
</TestProject>
</ItemGroup>
在NCover任務的使用將是與上面相同。
這樣你的主構建腳本不需要知道任何特定的測試項目;它只是處理你的ItemGroup「TestProject」。
嗨Filburt。我正在尋找將單元測試項目集合傳遞給NCover的答案。 – Fenton 2011-02-09 09:19:24