【问题标题】:Test execution error in Visual Studio 2015 (worked in 2013)Visual Studio 2015 中的测试执行错误(2013 年工作)
【发布时间】:2016-06-24 01:01:46
【问题描述】:

我们正在从 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 文件)。我可以打开它并“调试”它,但它只是向我显示了一行失败的代码,并且调用堆栈仅显示 [Managed Code],这意味着我无法识别导致问题的实际测试。

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

有什么想法吗?

谢谢

格里夫

【问题讨论】:

  • 我认为 NUnit 已经完全迁移到它的 3.0 版本,所以你至少应该再次升级和测试。
  • 2.x 声称完全兼容 Vs2015。但是,我们确实已经有一个计划好的工作项要升级(我们必须同时升级 BuildServer)。不过,感谢您的建议,我将在第二天左右在本地进行测试。
  • 您使用的是 VS 2015 RTM 还是更新 1?这听起来像是一个 RTM 问题,所以如果你在那里,你应该更新 VS。关于 NUnit,您应该等待更新,因为适配器仍然是 ctp,并且正在清除错误。
  • 看到你说更新 1 为时已晚:
  • 你写你要去Update1,但你的问题听起来像一个RTM问题。如果您尝试其他解决方案,这会重现吗?你可以在这里github.com/OsirisTerje/NUnit.VisualStudioAdapter.TestPrograms 下载一个测试程序并使用TestNUnitMultipleTest.sln。它包含> 10000个测试。如果可行,那么您的设置是正确的,那么接下来就是将该转储文件发送给 MS。关于 NUnit,您应该等待更新,因为适配器仍然是 ctp,并且正在清除错误。

标签: visual-studio unit-testing visual-studio-2015 nunit resharper


【解决方案1】:

跟踪问题。我们的解决方案中有一个实现 IDispose 的类,而我们的一个单元测试没有处理该类,它只是让它超出了范围。

所以因为 Disposable 对象没有被释放,所以类的 Finalizer 没有被抑制。因此,GC 调用了 Finalizer,后者又试图访问另一个也超出范围的对象,从而导致 Test Execution Runner 崩溃的异常。

有趣的是,运行 NUnit 2.x 的 VS2015 崩溃了,但 VS2013 中的相同设置可以正常处理。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2015-10-16
    相关资源
    最近更新 更多