Azure Pipelines 中的 NUnit 生成 trx 文件:“未找到可发布的结果”

问题描述 投票:0回答:1

问题如下:

我最近开始了一个新项目,他们有 28 个单元测试项目(使用 NUnit),其中许多仍然是 .NET Framework 4.7.2。他们有 3 个项目升级到 .NET 6,但现在它们不包含测试结果,并且在管道中不可用。在本地运行构建解决方案时,它确实会在本地生成正确的 trx 文件,但它也没有正确的 XML 元素。

这是天蓝色管道中的错误:

从管道中,我可以下载包含所有 trx 文件的 TestResults zip,它们都适用于 4.7.2 项目,但是无法找到这 3 个 .NET 6 项目 trx 文件,如上所示。

这是我们关于测试结果发布的 YAML 配置:

   ## Publish test results
  - task: PublishTestResults@2
    displayName: Publish Test Results
    condition: succeededOrFailed()
    inputs:
      testRunner: VSTest
      testResultsFiles: Pipelines/TestResults/*.trx
      mergeTestResults: true
      testRunTitle: Test run for build $(Build.BuildNumber)
      platform: Any CPU
      configuration: Release

文件确实存在,但缺少某些 XML 元素,例如:“结果”、“测试定义”和“测试条目”。

这是“空”trx 文件的示例:

这是来自 4.7.2 项目之一的 trx 文件的正确示例:

如您所见,“正确”文件具有 XML 元素结果等。.NET 6 项目 trx 文件没有这些元素...有谁知道为什么以及如何将这些结果放入.NET 6 项目的 trx 文件?在 Visual Studio 中,测试确实运行并且正在运行!

编辑:

是的,通过 VS 测试资源管理器,一切似乎都正常。但是我发现,通过在项目文件夹本身中运行“dotnet test”,它将抛出以下错误“错误 CS0246:找不到类型或命名空间名称”(您是否缺少 using 指令或程序集参考?)”

所以我的项目 A 引用了安装了 Nugets 的项目 B,然后它抱怨项目 B 没有提到对 Nugets 的引用,但它们被引用了。代码会编译、构建等。但当我自己在目录中运行“dotnet test”时,似乎并非如此。

测试项目 A 是 net6.0,项目 B 是框架 4.7.2,并且引用了 Nuget,顺便说一句。 以及例如引用项目 B 的项目 D(框架 4.7.2 项目),如果您在其目录中运行“dotnet test”,则可以工作。

编辑2:

A (net6.0) → B (framework4.7.2) → C (framework4.7.2) 有 NUGET 包
⇒ 挪威克朗
A (net6.0) → C (framework4.7.2) 有 NUGET 包
⇒ 挪威克朗
A (framework4.7.2) → B (framework4.7.2) → C (framework4.7.2) 有 NUGET 包
⇒ 好的
A (net6.0) → net6.0 项目中安装的 NUGET
⇒ 好的

azure-devops azure-pipelines nunit vstest
1个回答
0
投票

我找到了问题的答案!

问题在于他们的framework4.7.2项目在各自的.csproj文件中有一个“Exe”。这样做是因为他们使用了一些程序集重定向(遗留的东西),并且只能在 EXE 中完成,所以有人告诉我。当将一些项目升级到net6.0时,他们留下了“OutputType”。另一个团队的一些资深人士向我解释了这个问题,这与托管和非托管代码有关。 net6.0 项目您无法再运行 EXE(或者无法使用程序集重定向内容),因此我必须选择“.dll”文件并在这些文件上运行“dotnet test”。

而且它有效!在本地或在管道中对这些 net6.0 项目的特定“.dll”文件运行“dotnet test”确实会执行测试!然后对于旧项目我仍然去寻找 EXE 来运行。

如果其他人也有这个问题,希望这个解释有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.