作为一些 build automation of running xUnit.net tests with MSBuild 的一部分,我遇到了需要循环处理一批项目的情况。
在循环内,我需要检测迭代是否失败,但是无论如何我都想继续执行。然后,在批处理位之后,我需要知道是否发生了一个或多个错误,以便向 TeamBuild 报告结果。
IOW,伪代码:
Task Name=RunTests
CreateItems
ForEach item CallTarget Target=RunTest ContinueOnError=true
CombineNUnitResults
Report success/failure
Task Name=RunTest
XUnit item
我希望这可以在没有自定义任务的情况下实现(或者像 Jonne 那样破解 xunit.net MSBuild 任务)。 (但愿意使用MSBuild Community或Sdc任务)
@BradWilson:我这是不可能干净地完成的,我将寻找 Jonne 对 NUnit 任务的更改,以使其也进入 xunit 任务
另请参阅:How do I get Team Build to show test results and coverage for xUnit.net test suite?
最佳答案
这就是我们所做的:
<NUnit Assemblies="@(TestAssemblies)"
ToolPath="$(NUnitPath)"
WorkingDirectory="%(TestAssemblies.RootDir)%(TestAssemblies.Directory)"
OutputXmlFile="@(TestAssemblies->'%(FullPath).$(NUnitFile)')"
Condition="'@(TestAssemblies)' != ''"
ExcludeCategory="$(ExcludeNUnitCategories)"
ContinueOnError="true">
<Output TaskParameter="ExitCode" ItemName="NUnitExitCodes"/>
</NUnit>
<Error Text="Test error(s) occured" Code="%(NUnitExitCodes.Identity)" Condition=" '%(NUnitExitCodes.Identity)' != '0' And '@(TestAssemblies)' != ''"/>
无论是否失败,这都将运行所有单元测试,但如果出现任何故障,则在所有单元测试运行后都会失败。注意 ContinueOnError="true"
确保它们全部运行,最后的错误检查是否有任何一个失败(在 nunit 0 中表示成功,其他都表示失败)。
注意:这是使用 MSBuildCommunityTasks NUnit 任务,但如果您只是将 exec 与 nunit exe 一起使用,则可以获得相同的效果。输出“ExitCode”对于从 ToolTask 继承的任何 Task 都是通用的。
关于msbuild - 在 MSBuild 中捕获错误状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1059230/