【问题标题】:Trapping Error Status in MSBuild在 MSBuild 中捕获错误状态
【发布时间】:2009-06-29 16:30:40
【问题描述】:

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

【问题讨论】:

    标签: msbuild xunit.net exit-code tfsbuild


    【解决方案1】:

    这就是我们所做的:

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

    【讨论】:

    • 嗨,迈克,感谢您抽出宝贵时间回复。根据我的阅读,ExitCode 是一个自定义的 NUnit 任务属性,它没有在 xUnit 任务中实现。 (NUnit 任务也需要多个程序集(xUnit 没有,这就是为什么它的参数被称为 Assembly 并且在 xUnit codeplex Discussions 上对此进行了讨论))。现在我已经阅读了注释位,我知道我需要做更多的研究。将删除此评论并在我这样做时将其替换为更明智的内容(我原以为 ExitCode 仅在 NUnit 和 Exec 上)。干得好,我正在准备 MSPress 书!
    • 啊 - 很好,xunit 任务不是从 ToolTask​​ 派生的,所以创建一个issue on the codeplex site requesting it to。完成后,我只需要做一些干净的 MSBuild 东西来遍历程序集列表并合并 XML
    • +1 - 我遇到了类似的问题,虽然这个答案没有直接解决它,但它引导我朝着正确的方向前进
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢布拉德,我也在那边跟踪它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多