NUnit3 作为 TeamCity 构建步骤的一部分抛出 "Process exited with code -2"

NUnit3 as part of buildstep in TeamCity throws "Process exited with code -2"

我遇到了一个有趣的问题。我创建了使用 NUnit3 控制台(通过命令行)运行单元测试的 TeamCity 构建步骤。

构建步骤设置:

Command executable: SomeRootFolder\Packages\NUnit.ConsoleRunner.3.4.1\tools\nunit3-console.exe Command parameters: SomeRootFolder\Solution\Project.sln --process=single --timeout=300000 --where "cat != Slow"

构建步骤开始按预期执行:

> [01:42:29][Step 2/4] NUnit Console Runner 3.4.1  
> [01:42:29][Step 2/4] Copyright (C) 2016 Charlie Poole 
> [01:42:30][Step 2/4] Runtime Environment 
> [01:42:30][Step 2/4]    OS Version: Microsoft
>                         Windows NT 6.3.9600.0 
> [01:42:30][Step 2/4] CLR Version: 
> [01:42:30][Step 2/4]    4.0.30319.34014 
> [01:42:30][Step 2/4] Test Files
> [01:42:30][Step 2/4]    SomeRootFolder\Solution\Project.sln
> [01:42:30][Step 2/4]  
> [01:42:30][Step 2/4] Test Filters
> [01:42:30][Step 2/4]    Where: cat != Slow
> Execution of 1000+ tests
> [02:37:32][Step 2/4] Test Run Summary
> [02:37:32][Step 2/4]  Overall result: Failed
> [02:37:32][Step 2/4]  Test Count: 1337, Passed: 1289, Failed: 0, Inconclusive: 0, Skipped: 48
> [02:37:32][Step 2/4]  Skipped Tests - Ignored: 48, Explicit: 0, Other: 0
> [02:37:32][Step 2/4]   Start time: 2016-09-15 23:42:52Z
> [02:37:32][Step 2/4]     End time: 2016-09-16 00:37:26Z
> [02:37:32][Step 2/4]     Duration: 3273.646 seconds
> [02:37:32][Step 2/4] 
> [02:37:32][Step 2/4] Results (nunit3) saved as TestResult.xml
> [02:37:33][Step 2/4] Process exited with code -2
> [02:37:33][Step 2/4] Step Nunit tests - investigation - full build (Command Line) failed

只要至少有 1 个测试失败,执行就会以代码 0 退出,并且在 Team City 中报告所有内容都没有问题(构建步骤被标记为失败,报告有关 failed/passed 测试的统计信息等)

一旦所有测试都通过,构建步骤就会以代码 -2 退出,尽管看起来一切正常。

我也试过只测试一些单独的部分(特定程序集),构建步骤没有问题地完成并且它是绿色的(退出代码 0)。

任何想法,发生了什么事?发生这种情况的唯一情况是,当所有测试都通过并且使用整个解决方案执行构建步骤时。

-2 是发现无效程序集时提供的退出代码。

通过 运行ning .sln - NUnit 必须计算出哪些构建的程序集是相关的 NUnit 测试程序集,并尝试仅 运行 那些。由于 .sln 和 .proj 文件不时更改格式,这不是一个完美的功能,有时会丢失文件。

尝试在命令行中按顺序列出所有测试 dll,看看是否能解决问题。例如

Command parameters: a.dll b.dll c.dll --process=single --timeout=300000 --where "cat != Slow"

或者,应该可以查看 TestResult.xml 并搜索标记为 "invalid" 的 "assembly" 个组件。如果您发现 NUnit 正在尝试 运行 它应该忽略的项目类型,您可以提交 bug report.