使用 Azure 管道和封面创建测试报告不会创建 coverage.opencover.xml 文件



这是我的解决方案结构:

.
├── Application
├── Application.Core
├── Application.Domain
└── Application.UnitTests -> HAS codecov 1.9.0 NuGet package installed

构建脚本在其他方面工作正常,但我无法让它在根文件夹中以coverage.opencover.xml格式创建被套结果。

My azure-pipelines.yml:

trigger:
- master
pool:
vmImage: "vs2017-win2016"
variables:
solution: "**/*.sln"
buildPlatform: "Any CPU"
buildConfiguration: "Release"
steps:
- task: DotNetCoreCLI@2
displayName: "Building **/*.csproj..."
inputs:
command: build
projects: "**/*.csproj"
arguments: "--configuration Release"
- task: DotNetCoreCLI@2
condition: succeededOrFailed()
displayName: Testing **/*.UnitTests/*.csproj
inputs:
command: test
projects: |
**/*.UnitTests/*.csproj
arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutput=$(Agent.BuildDirectory)coverage /p:CoverletOutputFormat=opencover /p:Exclude="[*Tests]*"'
nobuild: true
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testRunner: VSTest
testResultsFiles: "**/*.opencover.xml"
- powershell: .codecov.ps1 -token $(CODECOV_TOKEN) $(Agent.BuildDirectory)coverage.opencover.xml
displayName: Upload to CodeCov.io

结果,我得到了Testing **/*.UnitTests/*.csproj任务的以下输出:

正在启动:测试 **/。UnitTests/.csproj ==================================================================================== 任务:.NET Core 描述:生成、测试、打包或 发布 dotnet 应用程序,或运行自定义 dotnet 命令 版本:
2.162.0 作者 : Microsoft 公司帮助 : https://learn.microsoft.com/azure/devops/pipelines/tasks/build/dotnet-core-cli ===========================================================================================chcp.com========================================================================================================================================================================================================================================================== 文件\dotnet\dotnet.exe" 测试 d:\a\1\s\BlazorApp.UnitTests\BlazorApp.UnitTests.csproj --logger trx --results-directory d:\a_temp --configuration Release/p:CollectCoverage=true/p:CoverletOutput=d:\a\1\coverage/p:CoverletOutputFormat=opencover/p:Exclude=[Tests]Test run for d:\a\1\s\BlazorApp.UnitTests\bin\Releaseetcoreapp3.1\BlazorApp.UnitTests.dll(.NETCoreApp,版本=v3.1( Microsoft (R( 测试执行命令行工具版本 16.3.0 版权所有 (c( Microsoft公司。 保留所有权利。

正在开始测试执行,请稍候...

共有 1 个测试文件与指定模式匹配。结果文件: d:\a_temp\VssAdministrator_fv-az74_2019-12-25_11_32_03.trx

测试运行成功。总测试: 1 通过:1 总时间:1.5842 秒

问题是没有创建coverage.opencover.xml文件,即使yml参数定义了应该执行的封面设置。如果 PowerShell 脚本可以找到现在缺少的测试结果文件,则codecov.ps1该脚本将起作用。

基本上,除非另有定义,否则默认的DotNetCoreCLI@2任务似乎会将--results-directory d:a_temp参数添加到测试命令中。这似乎阻止了被套运行。

为了兼容,我将输出文件类型更改为cobertura,并向任务添加了以下定义:publishTestResults: false这似乎已经解决了我的问题。

- task: DotNetCoreCLI@2
condition: succeededOrFailed()
displayName: Testing **/*.UnitTests/*.csproj
inputs:
command: test
projects: |
**/*.UnitTests/*.csproj
arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutput=$(Agent.BuildDirectory)coverage /p:CoverletOutputFormat=cobertura /p:Exclude="[*Tests]*"'
nobuild: true
publishTestResults: false

还可以确保单元测试项目包含 coverlet.msbuild 和 OpenCover 的 NuGet 引用。我认为单独的coverlet.msbuild应该没问题。

最新更新