在MSBuild中捕获错误状态

时间:2009-06-29 16:30:41

标签: msbuild xunit.net exit-code team-build

作为某些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?

2 个答案:

答案 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任务来修复此问题!

http://xunit.codeplex.com/Release/ProjectReleases.aspx