我们正在从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向我们展示了所涵盖的陈述数量。略有不同的价值观,但他们会弄乱我们的图表。
当测试执行失败时,它会创建一个Dump文件(它还会创建一些似乎只显示我安装的DLL的XML文件)。我可以打开它并“调试”它,但它只是向我显示一行代码失败,并且调用堆栈仅显示[托管代码],这意味着我无法识别导致问题的实际测试。
这在VS2013以及在VS2015中运行的ReSharper中完美运行这一事实表明“这不是我们的错”,但是我想这一点,它并没有帮我解决这个问题。
有什么想法吗?
由于
格里夫
答案 0 :(得分:1)
追踪问题。我们的解决方案中有一个类实现了IDispose,而我们的一个单元测试没有处理该类,它只是允许它超出范围。
因为Disposable对象没有处理掉,所以“Finalizer”类没有被抑制。因此,GC调用了Finalizer,后者又试图访问另一个也超出范围的对象,导致一个异常,导致Test Execution Runner崩溃。
有趣的是,运行NUnit 2.x的VS2015崩溃,但VS2013中相同的设置可以应对。
顺便说一句,在调试DUMP文件时(见上文),我意识到调用堆栈是无关紧要的,我只需在Finalizer中加入一些防御性编码。