在所有测试通过后,TFS 上的 VS 测试步骤失败

VS Test step on TFS failing after all tests pass

我在 TFS 2015 中使用 VS 测试步骤 运行 收集了 MsTest 和 NUnit 测试。我正在使用 NUnit 测试适配器 3.4.1 运行 构建代理上的测试。

最后,尽管测试通过了,但 Nunit 似乎出现问题并且构建步骤因这两个错误而失败。

2016-09-04T09:59:44.7209787Z ##[error]Error: Exception NUnit.Engine.NUnitEngineException, Exception thrown executing tests
2016-09-04T09:59:44.7209787Z ##[error]
2016-09-04T09:59:44.7209787Z ##[error]Error: Exception encountered unloading AppDomain
2016-09-04T09:59:44.7209787Z ##[error]
2016-09-04T09:59:44.7209787Z Information: NUnit Adapter 3.4.1.0: Test execution complete
2016-09-04T09:59:44.8615975Z Results File: C:\agent\_work2\TestResults\SRV-BLD1 2016-09-04 01_22_45.trx
2016-09-04T09:59:44.8615975Z Total tests: 139. Passed: 134. Failed: 0. Skipped: 5.

我检查过套件中确实有139个测试,其中5个设置为忽略(2个是MSTest,3个是NUnit)。

我不确定是否有地方可以获得更详细的错误解释。搜索此站点,google 似乎表明 NUnit.Engine.NUnitEngineException 链接到测试发现(例如 , and ),但我的测试正在被发现,所以我不确定这是否是相关(对 NUnit 很陌生,所以很多事情都不确定)。

我还看到了两个处理适配器故障的链接 ( and here),但错误并不完全匹配,尽管可能只是因为我没有同样的冗长程度。

在 TFS 中,该步骤没有任何配置,只是启用了它和 DLL 的路径。

有谁知道导致错误的原因(我假设是导致构建失败的原因)?或者,获取更多 precise/verbose 错误堆栈以调查问题的下一步应该是什么?

作为旁注,我看到了 this SO 答案,其中说明了这一点:

MSTest.exe returned an exit code of 1 indicating that not all tests passed.

我无法找到 VSTests 在遇到跳过测试时失败的任何确认信息,但这是否也是一个问题?

感谢您的帮助。

更新

按照下面的建议,我直接从 IDE 中尝试 运行ning 这个,并得到这个输出(文件夹已编辑)

------ Discover test started ------
NUnit Adapter 3.4.1.0: Test discovery starting

NUnit Adapter 3.4.1.0: Test discovery complete
========== Discover test finished: 139 found (0:00:00.8820879) ==========
------ Run test started ------
System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain. This can happen if the test(s) started a thread but did not stop it. Make sure that all the threads started by the test(s) are stopped before completion.
NUnit Adapter 3.4.1.0: Test execution started
Running all tests in C:\agent\_work2\s\codePorject\bin\Debug\codeProjectTests.dll
NUnit3TestExecutor converted 37 of 37 NUnit test cases
System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain. This can happen if the test(s) started a thread but did not stop it. Make sure that all the threads started by the test(s) are stopped before completion.
Exception NUnit.Engine.NUnitEngineException, Exception thrown executing tests
Exception encountered unloading AppDomain
NUnit Adapter 3.4.1.0: Test execution complete
========== Run test finished: 139 run (1:20:10.3290294) ==========

我发现一个类似的xUnit issue 打开了,但是好像没有解决办法。

This Whosebug 回答建议使用睡眠定时器,所以我可能会试试。

NUnitEngineException 就是它所说的:引擎发现的异常。它可能是由多种原因引起的,消息会指出问题所在。在你的情况下,消息说 "Exception encountered unloading AppDomain" 这意味着......它说的是什么。

测试适配器捕获并处理异常,生成您看到的消息。有一些迹象表明 TFS 也看到了异常并因此未能通过测试 运行。如果你要在 VS IDE 下 运行 这个,我想你会看到来自适配器的消息,但 运行 不会失败。有一个关于此的 NUnit3 测试适配器问题,但不清楚解决方案是在适配器内还是 TFS 问题。

如果您在 IDE 下尝试此操作,我希望您也能 post 从 运行 输出 window 文本。

最后,它看起来像是 Firefox 浏览器 windows 和 nUnit 之间的某种竞争条件。在我的清理代码中,我正在终止 firefox 和 iisexpress 进程。添加睡眠呼叫已解决问题:

public static void AssemblyCleanup()
{
    foreach (var process in Process.GetProcessesByName("firefox")) process.Kill();
    foreach (var process in Process.GetProcessesByName("iisexpress")) process.Kill();
    System.Threading.Thread.Sleep(5000);
}