如何解决升级到 .NET 6 后测试项目未运行单元测试的问题

作者 : 慕源网 本文共2479个字,预计阅读时间需要7分钟 发布时间: 2022-01-15 共122人阅读

介绍

我正在将 .NET Core 3.1 项目升级到 .NET 6,并且在我的测试项目中运行测试用例时遇到了问题。我有几个项目,每个项目都有测试项目;升级后一切正常。但是,升级后我只遇到了两个测试项目的问题。所以在本文中,我将分享这个问题以及我如何修复它的解决方案。

即使升级后没有任何错误,解决方案已清理并成功构建我无法运行两个项目的单元测试。

升级完成后,我正在测试出现错误的解决方案:  “unexpected error detected. Check the Tests output Pane for details.

我的两个测试项目没有运行测试用例,它即将开始并且需要一些时间来运行测试,但几分钟后就停止了。这是使用 xunit 框架进行单元测试的测试项目的场景。

下图显示了我在测试时遇到的错误。

如何解决升级到 .NET 6 后测试项目未运行单元测试的问题

当我检查输出窗格时,确切的错误是

Starting test discovery for requested test run

========== Starting test discovery ==========

Microsoft.VisualStudio.TestPlatform.ObjectModel.TestPlatformException: Failed to negotiate protocol, waiting for response timed out after 90 seconds. This may occur due to machine slowness, please set environment variable VSTEST_CONNECTION_TIMEOUT to increase timeout.

at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.TestRequestSender.CheckVersionWithTestHost()

at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.ProxyOperationManager.SetupChannel(IEnumerable`1 sources, String runSettings)

at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.ProxyDiscoveryManager.DiscoverTests(DiscoveryCriteria discoveryCriteria, ITestDiscoveryEventsHandler2 eventHandler)

========== Test discovery aborted: 0 Tests found in 1.5 min ==========

========== Starting test run ==========

Failed to negotiate protocol, waiting for response timed out after 90 seconds. This may occur due to machine slowness, please set environment variable VSTEST_CONNECTION_TIMEOUT to increase timeout.

Failed to negotiate protocol, waiting for response timed out after 90 seconds. This may occur due to machine slowness, please set environment variable VSTEST_CONNECTION_TIMEOUT to increase timeout.

========== Test run aborted: 0 Tests (0 Passed, 0 Failed, 0 Skipped) run in < 1 ms ==========”

解决方案

然后我进行了研究,花了几个小时浏览各种网站、论坛,但找不到解决方案。后来,我检查并比较了升级到 .NET 6 后工作测试项目的项目文件和升级后出现问题的项目,我发现 .csproj 文件中存在一些差异。

区别如下:

  1. .csproj 文件中没有 Microsoft.NET.Test.Sdk。
  2. 有问题的项目与工作项目具有不同版本的 xunit 和 xunit.runner.visualstudio。

我手动更新了项目文件(csproj)并使其与工作项目相同,然后清理并构建了项目。之后,测试项目完美运行。

project.csproj 文件的更新部分在下面突出显示。

如何解决升级到 .NET 6 后测试项目未运行单元测试的问题

或者,您也可以从 NuGet 包管理器或包管理器控制台添加“ Microsoft.NET.Test.Sdk”  。我对 xunit 和 xunit.runner.visualstudio 进行了更改,以使所有测试项目的版本保持一致。

请注意: 某些情况下,仅在 ItemGroup 中添加以下行可能会解决问题。就我而言,仅添加以下包参考即可解决问题。但是,为了保持相同版本的 xunit 和 xunit.runner.visualstudio,我在所有测试项目中保持相同版本。

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.1" />

详细测试项目的项目文件(.csproj 文件)

  • TargetFramework 指定项目的目标框架。
  • IsPackable 与此无关。单元测试项目不能打包,所以是多余的。如果您愿意,可以将其删除。但是,当您在 .Net 6 中创建测试项目时,它会默认出现。
  • 使用 Visual Studio 以及使用命令 dotnet test运行测试项目的包 xunit.runner.visualstudio 和 是必需的。Microsoft.NET.Test.Sdk 

就我而言, Microsoft.NET.Test.Sdk 缺少在运行单元测试中起着至关重要的作用,这就是我无法运行测试的原因。

我希望,这可以帮助您将测试项目升级到 .NET 6 并解决升级后遇到的问题。

 


慕源网 » 如何解决升级到 .NET 6 后测试项目未运行单元测试的问题

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录