对于我的项目,我使用的是集成的Visual Studio单元测试框架,但我遇到了一些我以前从未见过的问题。
我的一个类导致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个其他几乎完全相同的测试。 我试用了Windows 7 x64和带有VSTS 2008 SP1的Windows XP x86。两个系统都会发生崩溃。
答案 0 :(得分:0)
我无法想象这里出了什么问题。我们还有一些与MSTest有关的令人讨厌的问题。它非常不稳定和缓慢。
为了解决另一种问题,我们将测试主机配置为每个testrun再次重启。这可能也可以解决您的问题。
转到Tools
- > Options
- > Test Tools
- > Test Execution
。禁用“在测试运行之间保持测试执行引擎运行”。
启动测试版可能需要一些时间,因为测试主机每次都需要启动。但它解决了一些问题。
希望这有帮助。
答案 1 :(得分:0)
如果测试运行时出现问题,可能是某些资源被mstest进程锁定导致问题。
我可能会建议添加一些故障排除代码,以确保在发生意外异常时正确关闭所有文件资源。在LoadGoodConfigurationFromExeTest方法和AlphaProjectConfiguration代码中围绕StreamWriter方法抛出一些异常处理。
设置一些断点或在那里放一些记录以查看事情失败的地方(如果有的话)。
其他建议是完全注释掉AlphaProjectConfiguration类的使用,看看是否还会崩溃。听起来你说它只会在使用该类时崩溃。如果是这样,是时候深入研究了这个问题。
我可能没有多大帮助你,但这些是我要采取的第一步,并不知道你已经做了多少。
答案 2 :(得分:0)