32

我们刚刚从 Visual Studio 2008“升级”到 Visual Studio 2012。我们更新了单元测试,现在它们在单独运行时通过了,但是当我尝试全部运行时,出现以下错误:

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.appcontainer.x86.exe. Go to more details: [http://go.microsoft.com/fwlink/?linkid=232477][1]

所以我去了链接并按照说明添加注册表项以启用本地故障转储。然后错误消息更改为:

The active Test Run was aborted because the execution process exited unexpectedly. Check the execution process logs for more information. 
If the logs are not enabled, then enable the logs and try again.

显然它注意到了我在注册表中为启用崩溃所做的更改。但是,当我查看 %LOCALAPPDATA%\CrashDumps 时,没有创建任何文件。

如果我一次运行一个测试(甚至一次运行几个测试),我可以让它们全部通过。问题仅在于全部运行。

有没有其他人遇到过类似的问题?如果是这样,你是如何解决它们的?

基本上在MSDN上提出了相同的问题,但答案类似于“单击故障转储的链接”。该答案对我没有帮助,因为我没有看到任何指向故障转储的链接,并且我无法生成故障转储。

StackOverflow 上的这个问题也很相似,最终导致在Microsoft Connect 上记录了一个错误(看起来由于某种原因被推迟了),但我的问题可能有所不同,因为我的代码与“异步任务”无关(我不认为)。

编辑:问题似乎消失了,但问题可能是单元测试代码中未捕获的异常,正如下面的一些答案所暗示的那样。但是,我仍然很困惑为什么问题只出现在 Run All 中,而不是在运行较小的测试组或 Debug All 时出现。

4

8 回答 8

43

我有同样的问题,测试显然没有理由失败。后来我发现一个错误的方法导致了StackOverflowException. 当我修复我的错误时,VS 错误消失了。

也许它大部分时间都有效,因为您没有运行错误的代码。

于 2013-11-25T14:23:56.110 回答
22

到目前为止,我最好的解决方法是全部调试。这是通过 TEST -> Debug -> All Tests 完成的。它显然更慢,但它不会崩溃。

于 2013-10-03T21:35:11.750 回答
4

某些错误可能会发生这种情况,例如 stackoverflow。大概这会使测试运行程序崩溃,因此当它遇到导致问题的测试时它无法继续。

因此,解决方案是在调试中运行所有测试(从测试 -> 调试菜单),Visual Studio 将显示此类错误。

于 2014-10-24T09:10:13.740 回答
4

对于将来可能需要此功能的其他任何人:当通过单元测试执行控制台特定命令 (Environment.Exit(-1);) 时,我的测试运行程序崩溃了。即使在调试模式下运行也会崩溃 - 我无法获得有用的错误消息。

所以我的场景与主要问题场景不同,a)调试根本不起作用 b)全部运行与单独运行没有区别。那是因为我的错误场景总是出现,但原始问题的堆栈溢出却没有。

底线:测试运行器很糟糕,如果它发现它不喜欢的东西就会崩溃。您需要手动隔离并找出 Bad Thing™ 是什么。

于 2014-11-05T23:36:19.923 回答
2

对于寻找这个的其他人:我有一些调用 System.Environment.Exit(123) 的代码,而我没有意识到这一点。所以检查任何终止进程的代码。

于 2015-02-19T13:46:28.123 回答
1

I've just had the same problem. It turned out that was my code - there was an infinite loop of WCF service calls. In your case this might be something else. So my proposal is to either remember (logs in version control system?) or to figure out (by excluding different tests from run, e.g. with bisection method) which place in code leads to this behavior. And wuala! It's cause of the problem and at the same time bug in code.

UPDATE As for questions in your EDIT. It could happen that running smaller groups of tests didn't reproduce the issue. In this case, given those groups included all tests, one can make an assumption that some tests interfere. Maybe some static data or fields in a test class? As for running tests in debug mode - I'm not surprised. Visual Studio test runner behaves different in "Run" mode vs "Debug" one.

于 2013-11-12T18:34:16.913 回答
0

我遇到了类似的问题,只是它不是 stackoverflow 异常。这是由于我使用 Entity Framework 测试的项目和 NUnit 项目没有包含对 EntityFramework 和 EntityFramework.SqlServer 模块的引用引起的。添加对实体框架模块的引用修复了它。

于 2014-02-11T12:00:31.707 回答
0

刚遇到同样的问题。关闭和重新打开视觉工作室为我修复了它。

于 2017-12-07T12:23:02.537 回答