Unit testing vstest.executionengine.exe在TFS上崩溃,但在我的本地VS2012上一切正常

Unit testing vstest.executionengine.exe在TFS上崩溃,但在我的本地VS2012上一切正常,unit-testing,visual-studio-2012,tfs,tfsbuild,Unit Testing,Visual Studio 2012,Tfs,Tfsbuild,在TFS服务器上运行测试时,出现以下错误: The active Test Run was aborted because the execution process exited unexpectedly. To investigate further, enable local crash dumps either at the machine level or for process vstest.executionengine.exe. Go to more details: [http

在TFS服务器上运行测试时,出现以下错误:

The active Test Run was aborted because the execution process exited unexpectedly. To investigate further, enable local crash dumps either at the machine level or for process vstest.executionengine.exe. Go to more details: [http://go.microsoft.com/fwlink/?linkid=232477]

当我在本地机器上运行这个测试时,我得到了“全部通过”的结果。我不知道可能的原因是什么,测试在TFS服务器上运行与在本地运行有什么区别?

请确保在生成服务器上安装了Visual Studio 2012。

我们在一个CI生成中遇到了相同的问题。原因是一个(或多个)测试正在启动单独的线程,当崩溃发生在这样的线程中而不是在vstest.executionengine的主线程中时,该进程只是崩溃,没有附加信息。按照错误消息中的建议启用崩溃转储有助于我们定位有问题的模块。另一种方法是开始从构建定义中删除测试程序集,以便在定位有问题的测试之前,我们只运行部分单元测试


本地环境和TFS之间的区别在于生成服务器创建的文件夹结构与本地不同,因此某些相对路径会出错。正是在我们的情况下,我们丢失了一些数据文件。我们都忘了将它们映射到构建定义的“源设置”路径中,也忘了正确部署它们。

今天我们遇到了同样的例外:

为活动测试运行的测试源运行Visual Studio测试运行程序
已中止,因为执行进程意外退出。到
进一步调查,在计算机上启用本地崩溃转储
进程vstest.executionengine.exe的级别或。转到更多详细信息:
测试运行已完成。0
执行测试。测试运行失败

所有单元测试用例都被中止。我们不知道为什么以及哪个测试用例导致了崩溃

我们随后配置了tfs build server以收集问题的转储文件

并用于分析转储文件。最后我们找出了根本原因

根本原因是一个单元测试用例调用了以下方法和结果thead锁:

[[PreSubMethodFrame] (System.Messaging.Interop.SafeNativeMethods.IntMQPathNameToFormatName)] System.Messaging.Interop.SafeNativeMethods.IntMQPathNameToFormatName(System.String, System.Text.StringBuilder,Int32ByRef) System.Messaging.Interop.SafeNativeMethods.MQPathNameToFormatName(System.String, System.Text.StringBuilder,Int32 ByRef)+1c System.Messaging.MessageQueue.ResolveFormatNameFromQueuePath(System.String, Boolean)+154 System.Messaging.MessageQueue.Exists(System.String)+ea


它在TFS上是否始终失败?我在构建服务器上遇到了相同的问题。问题间歇性出现。到目前为止,我的解决方案是简单地再次运行构建,一切都很好。我还没有在开发人员机器上看到这个问题。我的环境是VS2013/TFS2013,它使用32位运行程序执行测试。这里的问题与此相同,它也是由测试异步方法(使用VSO+MSpec)引起的。解决方案是用方法.Wait()替换Wait方法()。