xUnit 测试在本地运行,但不在 Azure DevOps 上运行

Tim*_*Tim 6 xunit build-pipeline vstest azure-devops

我的 xUnit 测试在本地运行良好,但无法在 Azure DevOps 上运行。受测试的程序集是 .NET 5.0 程序集,测试程序集也是如此。

检查 VsTest 任务的日志文件,我看到以下内容

测试运行检测到针对不同框架和平台版本构建的 DLL。以下 DLL 与当前设置不匹配,即 .NETFramework、Version=v5.0 框架和 X86 平台。

UnitTests.dll 是为 Framework .NETCoreApp、Version=v5.0 和 Platform AnyCPU 构建的。

Microsoft.TestPlatform.CommunicationUtilities.dll 是为 Framework .NETStandard、Version=v2.0 和 Platform AnyCPU 构建的。

Microsoft.TestPlatform.CoreUtilities.dll 是为 Framework .NETStandard、Version=v2.0 和 Platform AnyCPU 构建的。

Microsoft.TestPlatform.CrossPlatEngine.dll 是为 Framework .NETStandard、Version=v2.0 和 Platform AnyCPU 构建的。

Microsoft.TestPlatform.PlatformAbstractions.dll 是为 Framework .NETCoreApp、Version=v2.1 和 Platform AnyCPU 构建的。

Microsoft.TestPlatform.Utilities.dll 是为 Framework .NETStandard、Version=v2.0 和 Platform AnyCPU 构建的。

Microsoft.VisualStudio.TestPlatform.Common.dll 是为 Framework .NETStandard、Version=v2.0 和 Platform AnyCPU 构建的。

Microsoft.VisualStudio.TestPlatform.ObjectModel.dll 是为 Framework .NETStandard、Version=v2.0 和 Platform AnyCPU 构建的。

testhost.dll 是为 Framework .NETCoreApp、Version=v2.1 和 Platform AnyCPU 构建的。

xunit.runner.visualstudio.dotnetcore.testadapter.dll 是为 Framework .NETCoreApp、Version=v2.1 和 Platform AnyCPU 构建的。

有关管理这些设置的更多详细信息,请访问http://go.microsoft.com/fwlink/?LinkID=236877&clcid=0x409 。

该链接并没有多大帮助(也许内容已更改)。我尝试在构建任务中使用命令行参数更改此设置: /Framework:net50 /Platform:x64 (AnyCPU 似乎不是有效的选项。)

...以及使用 .runsettings 文件(链接在我的构建任务中)

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <RunConfiguration>
    <TargetPlatform>x64</TargetPlatform>
    <TargetFrameworkVersion>net50</TargetFrameworkVersion>
  </RunConfiguration>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)

...以及链接到管道的 BuildPlatform。

无论进行任何更改,日志文件中的错误(以及第一句中列出的当前设置)都保持不变。

Leo*_*SFT 6

xUnit 测试在本地运行,但不在 Azure DevOps 上运行

根据错误信息:

Microsoft.TestPlatform.CommunicationUtilities.dll is built for Framework .NETStandard,Version=v2.0 and Platform AnyCPU
Run Code Online (Sandbox Code Playgroud)

您的测试项目似乎使用旧的 SDK。

要解决此问题,请尝试使用 dot net test 而不是 VS test 任务来测试 dll 文件:

- task: DotNetCoreCLI@2

  displayName: Test

  inputs:

    command: test

    projects: '**/*[Tt]ests/*.csproj'

    arguments: '--configuration $(BuildConfiguration)'

  enabled: false
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这对我有用。一些额外的评论:1)我能够禁用单元测试项目的单独构建任务,因为 dot net 任务正在寻找并构建 *.csproj 而不是 *.dll。2)我最初还得到了三份测试报告。全部显示通过,但任务总体失败。我将项目参数更改为具有实际的 *.csproj 文件名(即没有文件名通配符),并且此问题已解决。 (3认同)