2008-10-24 191 views
5

微软单元测试框架突然发生罢工。VSTestHost.exe已停止工作 - 无法运行单元测试

当我尝试在VS2008中运行测试时,出现消息“VSTestHost.exe已停止工作”的对话框。

我有Vista上运行的Visual Studio Team System 2008(版本9.0.30729.1 SP),应用了所有更新。

“问题报告和解决方案”建议我“升级到最新的零售版Visual Studio Team Edition for Software Testers”,这是不正确的。

我试过重新启动。
我试过“devenv/resetuserdata”

这些没有什么区别。

我想回到MbUnit基于这个废话,但这不是我的选择。
有关如何解决此问题的任何建议?

回答

7

这通常是由于代码中的错误,如无限循环或循环引用。

我有同样的问题,并意识到它是我的代码搞乱了,测试框架只是简单地保护自己免受我的代码。

对我来说关键是两个不同的测试框架发生同样的事情。所以它必须是我的代码。

1

我发现了我所问的问题,这是我的错。我编写了一个堆栈溢出:我将一些代码重构为一个扩展方法,将其重命名为匹配它调用的Linq扩展方法,因此它只是自我递归地调用它。

从此吸取教训:
1:"select" isn't broken。 由于声誉不佳,我太快责怪这个框架。

2:但它确实有一个病态的,一般的,完全误导性的错误信息。

在错误信息不好的情况下,一个很好的调试技巧就是试图确定哪些是什么以及哪些不会导致错误。就我而言,一旦我注意到这不是“测试运行”,那么突破就会发生失败,它只是包含Sql数据库测试的运行 - 域对象和模拟存储库测试可以运行得很好,所以必须是关于它运行的代码的东西。而且调试器会进入测试。我从灾难性的错误中认定它甚至没有那么远。

0

您是否尝试过在Visual Studio上运行修复或甚至重置为出厂设置?

要重置为出厂设置,请从运行窗口运行devenv/ResetSettings。

1

重要的是要注意,尽管解释VSTestHost.exe停止工作的错误信息不是很具描述性。在测试结果中,有一个链接表示“测试运行已完成”(或者在您的情况下,它会说“测试运行失败”),点击此时您将看到发生的导致测试主机的确切错误消息失败(堆栈溢出异常)。

他们会埋葬这些信息,但特别是当主机不会崩溃但有些测试根本无法正常工作时有用,有时可以找到为什么可以在该链接中找到的信息。