为什么Visual Studio 2019无法运行我的单元测试?

37
我在VS2019中看到了一些非常奇怪的NUnit测试行为,而在VS2017中相同的解决方案正常工作。我的解决方案中有几个NUnit测试项目。
在安装了NUnit Runner扩展的VS2017中,我可以在“测试资源管理器”窗口中看到所有测试,并且“运行全部”按钮将起作用并运行所有测试。我的组织中的一些开发人员使用Resharper而不是NUnit扩展程序,这也有效。
我已经停止使用Resharper,因为随着VS引入了更多功能,Resharper变得如此缓慢,以至于VS无法使用。
在VS2019中,“测试资源管理器”窗口将显示所有单元测试(即使未安装NUnit扩展程序)。如果我点击“运行全部”,它将不会运行任何测试,并且输出窗口将说0个测试被发现。同事们说Resharper可以毫无问题地运行所有测试。如果我右键单击单个测试项目并只运行这些测试,则某些项目将运行测试,但不是所有项目。
对于某些项目,我尝试安装NUnit3TestAdapater nuget包,这将允许VS2019运行该项目的测试(如果仅选择该项目)。这并不适用于所有项目,而且对于“运行全部”仍然无效。
有人知道可能导致这种情况发生的原因以及如何修复它吗?我已经更新了所有这些项目的最新版本的NUnit(3.12)和最新的TestAdapter(3.16)。

这个问题已经困扰我一年了,因为我需要同时安装VS2017和2019,并且需要训练新的开发人员如何解决这个奇怪的问题。


1
Visual Studio团队在VS2019中停止支持基于扩展的测试适配器 - 请参见此处:https://github.com/nunit/nunit3-vs-adapter/issues/576。您提到的“运行全部”无法正常工作的问题并不熟悉,您是否尝试过删除扩展,并仅在相关项目中安装适配器NuGet包?如果是这样,我建议您在nunit3-vs-adapter GitHub存储库上提交一个问题。 - Chris
7个回答

41

我遇到了同样的问题。在每次更新后似乎需要安装更多东西。

对于我的情况(Visual Studio 2019社区版,版本16.6.1),我现在也必须通过NuGet获取Microsoft.NET.Test.Sdk。

因此,最终我在我的测试项目中安装了三个包:

  • NUnit(3.12.0)
  • NUnit3TestAdapter(3.17.0)
  • Microsoft.NET.Test.Sdk(16.7.1)

然而,打开或关闭自动化测试发现对我来说没有任何改变。

希望这能帮助任何人。


1
测试发现选项似乎只对参数化测试有影响。我认为 Microsoft.NET.Test.Sdk 包在 .NET Core 项目中已经是必需品了,但在 .NET Framework 上不是。您使用的是哪个版本? - JamesFaix
2
我有完全相同的设置,安装Microsoft.NET.Test.Sdk解决了我的问题。但是,在NUnit的说明中没有提到Ms.NET.Test.SDK。无论如何,谢谢。 - Kamil
这对我在运行VS 2019社区版时有效,谢谢! - Luke Belbina
2
只需要安装NUnit3TestAdapter(已经安装了NUnit),不需要MS SDK。 - Eric Carlson
我只需要像@EricCarlson一样添加NUnit3TestAdapter。最新的NUnit3TestAdapter 4.4.2运行时错误,然后显示旧的初始化方法需要调整,因为设置了nUnit [SetUp]属性的方法参数无效。 - InquisitionX
显示剩余2条评论

33
解决方案是两个方面的组合:
  1. 在顶部菜单中导航到 Test > Options,然后禁用“从 C#和 Visual Basic .NET 源文件实时发现测试”的选项。该选项似乎与参数化测试不兼容。问题在于,参数化测试在源代码中不存在,而是由测试适配器在运行时生成。这也解决了我遇到的一个问题:参数化测试的“基本”测试显示为未运行的测试,在测试资源管理器中出现,尽管只有特定的测试用例才是真正的测试。(在我看来,默认情况下不应启用此功能,因为参数化测试非常有用,而在编译之前查看测试资源管理器中的新测试只是一个微不足道的便利,因为你必须编译才能运行它们。)

  2. 使用测试适配器的 NuGet 包而不是使用 VSIX 扩展。据我所知,对于这一部分,要求的是您的解决方案中至少有一个项目引用了它。如果至少有一个项目引用了它,则可以运行所有测试项目。(在我看来,这很有意义,因为它与 Visual Studio 外部的构建工具更兼容。)

欣喜地迎接变革!

2
回复:#2 你要用哪个 NuGet 包?有很多可供选择。 - Jesse Chisholm
2
@JesseChisholm 可能是 NUnit3TestAdapter - emragins
1
禁用“从C#和Visual Basic .NET源文件实时发现测试”确实有所改善(Visual Studio 2019,v16.8.2;xunit v2.4.1;xunit.runner.visualstudio v2.4.3),但它仍然比Resharper的test-explorer慢得多。 - JimiSweden
1
同意Resharper仍然领先,但自从VS2017以来,我就无法运行Resharper,因为在其他方面它太慢了,而且VS已经赶上了其许多功能。 - JamesFaix
哇,从没想到这会是问题所在。非常感谢。 - 3lvinaz
对于第二个问题,我仍然不清楚如何使用NuGet包来进行测试适配器。要如何更改测试适配器?@JamesFaix,你能展示一下截图吗? - Yang You

7

5
在我的情况下,我也必须安装Microsoft.NET.Test.Sdk NuGet包。

5

在我尝试的所有方法都无效之后,我只需安装 xunit.runner.visualstudio nuget,一切就能正常工作了。


这是解决我的问题的方法,谢谢! - P. Hinker
我添加了 xunit.runner.visualstudio NuGet 包,一切正常运行。 - Hossein Ebrahimi

0
在我的情况下,我最近使用VS 2019创建了一个新的测试类,默认情况下将测试类设置为“internal”。移除“internal”并将测试类设置为“public”解决了这个问题。

0

在VS22中有类似的经验 - 我将我的NUnit3TestAdapter更新到了4.4.2版本


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接