3

作为使用 MSBuild 运行 xUnit.net 测试的一些构建自动化的一部分,我遇到了需要循环一批项目的情况。

在循环内部,我需要检测迭代是否失败,无论如何我都想继续执行。然后在批处理位之后,我需要知道是否发生了一个或多个错误,以便将结果报告给 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 的改变a la NUnit 任务也使其成为xunit 任务

另请参阅:如何让 Team Build 显示 xUnit.net 测试套件的测试结果和覆盖率?

4

2 回答 2

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​​ 继承的任何任务都是通用的。

于 2009-06-29T18:12:43.300 回答
2

去抢 1.5 Beta。我们通过将 ExitCode 输出参数引入 xunit MSBuild 任务来解决此问题!

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

于 2009-08-09T01:10:49.840 回答