这是我的解决方案结构:
.
├── 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应该没问题。