2009-10-07 53 views
2

对于我的项目,我使用集成的Visual Studio单元测试框架,但我有一些我从未见过的问题。VSTestHost崩溃,将不再工作

我的一个类导致VSTestHost崩溃。所以首先,我认为这是因为有一堆代码导致堆栈溢出。真奇怪的是,现在,即使我创建了一个新项目或者使用了以前工作的较早的项目,VSTestHost也会立即崩溃(在点击运行测试按钮后1/2秒)。事实上,我不能再进行单元测试......这真的让我发疯。

我尝试了很多在互联网上找到的解决方案来解决这个问题,但没有任何工作。我必须恢复Windows到我最后一次更新才能恢复正常工作。可以肯定的是,这是一个导致单元测试框架发疯的特定测试类。当我第一次运行这个测试类时,一切顺利,所有测试都通过了,然后每次我尝试运行一个单元测试时,VSTestHost都会崩溃,从而阻止我在任何项目中进行单元测试。

在这里,我向您展示假设使程序崩溃的测试。我的LoadFromExe()方法只是使用ConfigurationManager.OpenExeConfiguration()方法。它使我现在有一个月使用这个AlphaProjectConfiguration没有任何问题。

[TestMethod()] 
public void LoadGoodConfigurationFromExeTest() 
{ 

    using (StreamWriter sw = new StreamWriter(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath)) 
    { 
     sw.Write(Resources.GoodConfiguration); 
    } 

    AlphaProjectConfiguration actual = new AlphaProjectConfiguration(); 
    actual.LoadFromExe(); 

    Assert.IsNotNull(actual); 
} 

我只是尽全力解决了这个问题,现在我真的已经摆脱了它。这就是为什么我现在要求社区提供一些帮助。 谢谢。


编辑: 这个测试类包含了其他3次试验,几乎做同样的事情。 我在带有VSTS 2008 SP1的Windows 7 x64和Windows XP x86上尝试了这一点。这两个系统都会发生崩溃。

回答

0

我遇到了类似的问题,幸运的是a hotfix解决了我的机器上的问题。 如果你在这个问题的细节中有点杂,我已经在my blog中写过关于它的内容。

+0

我想尝试一下,但是这个bug神秘地消失了。我甚至无法再让它发生......我没有改变我的代码。我承诺,如果发生同样的问题,我会测试此修补程序,我会发布反馈。谢谢。 – Ucodia 2009-10-25 12:31:52

0

我无法想象这里出了什么问题。我们还有一些MSTest令人讨厌的问题。这是相当不稳定和缓慢的。

为了解决另一种问题,我们配置了测试主机以便为每个testrun重新启动。这可能也可以解决你的问题。

Goto Tools - >Options - >Test Tools - >Test Execution。禁用“保持测试执行引擎在测试运行之间运行”。

由于测试主机需要每次启动,因此可能需要一些时间来启动测试tun。但它解决了一些问题。

希望这会有所帮助。

+0

我试过了,目前它似乎正常工作。但目前我无法确认你的答案,因为发生这次事故的方式有点不可预测。我知道这会在任何时候崩溃!穿越手指。 谢谢。 – Ucodia 2009-10-07 13:02:05

+0

不幸的是,崩溃再次发生......我不知道它是否与ConfigurationManager或StreamWriter的错误使用(即使是使用语句)有关,或者与单元测试框架的不稳定性有关。 我要再次恢复Windows。我忘了提及我在Windows XP x86和Windows 7 x64下的VSTS 2008 SP1上进行了测试。这两起系统都会发生崩溃。 “ – Ucodia 2009-10-07 13:26:19

0

如果测试运行时出现问题,可能是某些资源被mstest进程锁定导致问题。

我可能会建议添加一些故障诊断代码,以确保所有文件资源在发生意外异常时都能够正确关闭。在LoadGoodConfigurationFromExeTest方法和AlphaProjectConfiguration代码中围绕StreamWriter方法抛出一些异常处理。

设置一些断点或在那里抛出一些日志,看看事情失败的地方(如果它们是)。

另外的建议是完全评论AlphaProjectConfiguration类的用法,看看事情是否仍然崩溃。听起来好像你说它只会在使用该类时崩溃。如果是的话,有时间深入研究。

我可能不会帮助你很多,但这些是我将要采取的第一步,不知道你已经完成了多少。

+0

”另外的建议是完全评论AlphaProjectConfiguration类的使用,看看事情是否仍然崩溃“ 这就是我迷失的地方,因为即使在注释掉之后,它仍然崩溃,即使在其他正常工作的项目之前和那是完全独立的。这就好像它正在破坏框架本身的完整性一样(我没有选择,只能将Windows恢复到之前的状态以使其重新运行)。 我要看看资源是否是我的问题的关键。 – Ucodia 2009-10-07 14:06:43