31

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

4

5 回答 5

30

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

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

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

万岁的改变!

于 2020-04-15T23:30:35.170 回答
29

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

不过,打开或关闭自动测试发现并没有改变任何东西。

希望这对任何人都有帮助。

于 2020-10-19T16:45:32.883 回答
4

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

于 2021-01-08T03:43:57.180 回答
4

我有同样的问题,并通过检查日志来解决。

在 Tools->Options->Test->General 中将 Logging Level 设置为 Diagnostic。这将在输出窗口的测试输出窗格中产生额外的输出。

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

于 2021-04-22T10:23:31.897 回答
3

在以上都不适合我之后。

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

于 2021-05-04T15:43:37.327 回答