为什么 Visual Studio 2019 不会运行我的单元测试?

Jam*_*aix 22 nunit visual-studio

我在 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,而且我需要培训新开发人员如何解决这个奇怪的问题。

Jam*_*aix 23

结果证明解决方案是两件事的结合。

  1. 在顶部菜单上,导航到测试 > 选项并禁用“从 C# 和 Visual Basic .NET 源文件实时发现测试”。此选项似乎与参数化测试不兼容。问题是参数化测试在源代码中并不“存在”,而是由测试适配器在运行时生成。这也解决了我看到的一个问题,参数化测试的“基本”测试在测试资源管理器中显示为未运行的测试,即使只有特定的测试用例是真正的测试。(在我看来,默认情况下不应启用此功能,因为参数化测试非常有用,而无需编译即可在测试资源管理器中查看新测试非常方便,因为无论如何您都必须编译才能运行它们。)

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

万岁的突破性变化!

  • 回复:“#2”哪个 NuGet 包?有很多可供选择的。 (2认同)
  • @JesseChisholm 可能是“NUnit3TestAdapter” (2认同)

小智 21

我偶然发现了同样的问题。在我看来,每次发布时我都必须安装越来越多的东西。就我而言(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)

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

希望这可以帮助任何人。

  • 我有完全相同的设置,安装 Microsoft.NET.Test.Sdk 解决了我的问题。但是,NUnit的说明中没有关于Ms.NET.Test.SDK的字样。不管怎么说,还是要谢谢你 (2认同)
  • 对我来说只添加了 NUnit3TestAdapter (NUnit 已经安装)。不需要 MS Sdk。 (2认同)

Yas*_*ine 9

我遇到了同样的问题并通过检查日志记录解决了。

在“工具”->“选项”->“测试”->“常规”中,将“日志记录级别”设置为“诊断”。这将在输出窗口的测试输出窗格中产生额外的输出。

就我而言,该问题与缺少“.NET Core 3.1 Desktop Runtime”版本有关。您可以在https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-desktop-3.1 下载最新版本。 14-windows-x86-安装程序


小智 5

就我而言,我还必须安装 Microsoft.NET.Test.Sdk nuget 包。


小智 5

以上都对我不起作用之后。

我刚刚安装了 xunit.runner.visualstudio nuget,现在一切正常。