msbuild - 在 MSBuild 中捕获错误状态

标签 msbuild xunit.net exit-code tfsbuild

作为一些 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/

相关文章:

替换之前的 MSBuild 备份文件(带时间戳)

python-2.7 - 运行 Python 脚本以从 MSBuild 进行部署

.net - 用于测试私有(private)方法的非代码生成的转发垫片

xunit.net - dotCover 和 xUnit 在某些环境中不收集覆盖率统计信息

regex - Bash:一行以 grep 命令的相反状态退出?

linux - 不同的 BASH 退出状态码

.net - 构建期间生成 T4 代码,自定义程序集引用

visual-studio-2012 - TFS/MSBuild 构建/发布 web 部署不会转换 web.config 文件

.net-core - 找不到与命令 "dotnet-test-xunit"匹配的可执行文件

powershell - 使用 PowerShell 命令 Start-Process 安装 msi 时,出现退出代码 1603 错误