Visual Studio 2015 年测试执行错误(2013 年工作)

Test execution error in Visual Studio 2015 (worked in 2013)

我们正在从 Visual Studio 2013 Update 5 升级到 Visual Studio 2015 Update 1。

我们的解决方案有很多测试,我们使用 NUnit 2.6.4,以及用于 NUnit 的 NUnit 测试适配器 2.x。

当 运行在 Visual Studio 2013 年进行这些测试时,它们都 运行 非常好。

然而,当 运行在 Visual Studio 2015 年的前 200 次奇数测试 运行 中,然后执行停止。然后,我可以 select 尚未 运行 的测试并成功执行这些测试。我在 VS2013 和 VS2015 中都安装了最新的 ReSharper,它可以愉快地执行所有测试。

从一开始我们就一直在保留每个版本的测试覆盖详细信息,并且从 Visual Studio 的测试 运行 中它显示了覆盖的块数。但 ReSharper 向我们展示了涵盖的语句数量。值略有不同,但它们会弄乱我们的图表。

当测试执行失败时,它会创建一个转储文件(它还会创建一些 XML 文件,这些文件似乎只是显示我安装的 DLL)。我可以打开它并 "debug" 它,但它只是向我显示了一行失败的代码,并且调用堆栈仅显示 [托管代码],这意味着我无法确定导致问题的实际测试。

这在 VS2013 和 ReSharper 运行ning 在 VS2015 中完美运行的事实表明 "it's not our fault",但虽然我想这样想,但它并不能帮助我解决这个问题.

有什么想法吗?

谢谢

格里夫

找到问题了。我们的解决方案中有一个 class 实现了 IDispose 并且我们的单元测试之一没有处理那个 class,它只是允许它超出范围。

因此,因为 Disposable 对象没有被释放,所以 class' Finalizer 没有被抑制。因此,GC 调用了 Finalizer,后者又试图访问另一个也超出范围的对象,导致异常导致测试执行运行程序崩溃。

有趣的是 VS2015 运行 NUnit 2.x 崩溃了,但 VS2013 中的相同设置可以很好地应对。

顺便说一句,在调试 DUMP 文件时(见上文),我意识到调用堆栈是无关紧要的,我只需要在终结器中加入一些防御性编码。