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


我们正在从Visual Studio 2013 Update

5升级到Visual Studio 2015 Update 1。

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

在Visual Studio 2013中运行这些测试时,它们都运行良好。

但是,在 Visual Studio 2015 中运行时,前 200 个测试运行,然后执行停止。 然后,我可以选择尚未运行的测试并成功执行这些测试。 我在VS2013和VS2015中都安装了最新的ReSharper,它愉快地执行了所有测试。

自古以来,我们一直在保留每个版本的测试覆盖率详细信息,并且从Visual Studio的测试运行程序中,它向我显示了覆盖的块数。 但ReSharper向我们展示了所涵盖的陈述数量。 值略有不同,但它们会弄乱我们的图表。

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

这在VS2013和VS2015中运行的ReSharper中完美运行的事实表明"这不是我们的错",但是虽然我想,但它并没有帮助我解决这个问题。

有什么想法吗?

谢谢

格里夫

已追踪问题。 我们的解决方案中有一个实现 IDispose 的类,我们的一个单元测试没有释放该类,它只是允许它超出范围。

因此

,由于一次性对象尚未释放,因此类的终结器未被抑制。 因此,GC 调用终结器,该终结器反过来尝试访问另一个也超出范围的对象,从而导致测试执行运行程序崩溃的异常。

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

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

最新更新