如何解决升级到 .NET 6 后测试项目未运行单元测试的问题
介绍
我正在将 .NET Core 3.1 项目升级到 .NET 6,并且在我的测试项目中运行测试用例时遇到了问题。我有几个项目,每个项目都有测试项目;升级后一切正常。但是,升级后我只遇到了两个测试项目的问题。所以在本文中,我将分享这个问题以及我如何修复它的解决方案。
即使升级后没有任何错误,解决方案已清理并成功构建我无法运行两个项目的单元测试。
升级完成后,我正在测试出现错误的解决方案: “unexpected error detected. Check the Tests output Pane for details.”
我的两个测试项目没有运行测试用例,它即将开始并且需要一些时间来运行测试,但几分钟后就停止了。这是使用 xunit 框架进行单元测试的测试项目的场景。
下图显示了我在测试时遇到的错误。
当我检查输出窗格时,确切的错误是
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 文件中存在一些差异。
区别如下:
- .csproj 文件中没有 Microsoft.NET.Test.Sdk。
- 有问题的项目与工作项目具有不同版本的 xunit 和 xunit.runner.visualstudio。
我手动更新了项目文件(csproj)并使其与工作项目相同,然后清理并构建了项目。之后,测试项目完美运行。
project.csproj 文件的更新部分在下面突出显示。
或者,您也可以从 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 并解决升级后遇到的问题。
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!