如何配置Azure DevOps的DotNetCoreCLI@2测试任务在未发现测试时失败
DotNetCoreCLI@2测试任务无测试用例时自动报错配置方案
DotNetCoreCLI@2任务本身不原生支持旧版Visual Studio Test任务的failOnMinTestsNotRun、minimumExpectedTests配置参数,可通过以下两种方式实现需求:
方案一:使用dotnet test内置参数(推荐,适用于.NET 5及以上SDK版本)
dotnet test命令从.NET 5版本开始内置了--fail-on-no-tests参数,未匹配到任何测试用例时会直接返回非零退出码,让DotNetCoreCLI@2任务判定为失败。
配置示例:
- task: DotNetCoreCLI@2 inputs: command: 'test' projects: '**/*Tests.csproj' arguments: '--configuration Release --fail-on-no-tests'
方案二:兼容旧版.NET SDK的实现方式
如果使用的是.NET 5之前的SDK版本,不支持上述内置参数,可以通过「执行测试+校验测试结果」的两步逻辑实现:
- 先执行DotNetCoreCLI@2测试任务,指定生成trx格式的测试结果文件
- 新增后续脚本任务,解析trx文件统计执行的测试用例总数,小于1则主动抛出错误终止流水线
配置示例:
# 第一步:执行测试并输出trx结果文件 - task: DotNetCoreCLI@2 inputs: command: 'test' projects: '**/*Tests.csproj' arguments: '--configuration Release --logger trx --results-directory $(Agent.TempDirectory)/TestResults' continueOnError: true # 先不直接失败,留到后续校验逻辑处理 # 第二步:校验测试用例执行数量(PowerShell示例,Windows代理可用) - pwsh: | $testResultFiles = Get-ChildItem -Path $(Agent.TempDirectory)/TestResults -Filter *.trx $totalTests = 0 foreach ($file in $testResultFiles) { $xml = [xml](Get-Content $file.FullName) $totalTests += [int]$xml.TestRun.ResultSummary.Counters.total } if ($totalTests -lt 1) { Write-Error "未检测到任何执行的测试用例,流水线终止" exit 1 } displayName: '校验测试用例执行数量'
如果你使用的是Linux/macOS代理,将上述PowerShell脚本替换为对应Shell版本的trx解析逻辑即可实现相同效果。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

