为什么Run All会导致VS2012单元测试崩溃,但逐个运行并不会导致崩溃?

时间:2013-10-03 21:35:12

标签: unit-testing visual-studio-2012

我们刚刚从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]

所以我转到link并按照说明添加注册表项以启用本地崩溃转储。然后将错误消息更改为:

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上的

This question也是类似的,最终导致bug being logged on Microsoft Connect(由于某种原因看起来被推迟),但我的问题可能会有所不同,因为我的代码与我的代码无关“异步任务”(我不认为)。

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

8 个答案:

答案 0 :(得分:43)

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

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

答案 1 :(得分:21)

我到目前为止最好的解决方法是调试所有。这是通过TEST - >完成的。调试 - >所有测试。它显然较慢,但不会崩溃。

答案 2 :(得分:4)

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

所以我的场景与主要问题场景的不同之处在于a)调试根本不起作用b)运行所有vs运行单独没有区别。这是因为我的错误情况总是出现,但原始问题的堆栈溢出没有。

底线:测试跑步者很糟糕,如果发现不喜欢的东西会崩溃。您需要手动隔离并找出Bad Thing™的内容。

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

对于其他寻找此问题的人:我有一些代码正在调用System.Environment.Exit(123),而我却没有意识到这一点。因此,请检查是否有任何终止该过程的代码。

答案 5 :(得分:1)

我刚遇到同样的问题。原来那是我的代码 - 有一个无限循环的WCF服务调用。在你的情况下,这可能是另一回事。所以我的建议是要么记住(登录版本控制系统?),要么弄清楚(通过从运行中排除不同的测试,例如使用二分法),这些代码会导致这种行为。和瓜拉!这是问题的原因,同时也是代码中的错误。

<强>更新 至于你的编辑中的问题。运行较小的测试组可能无法重现该问题。在这种情况下,考虑到这些组包括所有测试,可以假设某些测试会干扰。也许测试类中有一些静态数据或字段? 至于在调试模式下运行测试 - 我并不感到惊讶。 Visual Studio测试运行器在“运行”模式与“调试”模式下的行为不同。

答案 6 :(得分:0)

我有一个类似的问题,除了它不是stackoverflow异常。它是由我的测试项目使用Entity Framework和EntityFramework和EntityFramework.SqlServer模块中包含的NUnit项目not having references引起的。添加对Entity Framework模块的引用修复了它。

答案 7 :(得分:0)

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