作为某些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社区或Sdc任务)
和@BradWilson:我不可能干净利落地做,我会在NUnit任务中寻找Jonne的改变,以使其进入xunit任务
另请参阅:How do I get Team Build to show test results and coverage for xUnit.net test suite?
答案 0 :(得分:6)
这就是我们的工作:
<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都是通用的。
答案 1 :(得分:2)
去抢1.5 Beta。我们通过将ExitCode输出参数引入我们的xunit MSBuild任务来修复此问题!