用途:生成仅覆盖当前分支(与基线分支相比)改动源文件的 .NET 代码覆盖率报告。
主要流程与用法:
- 确定基线分支:优先使用 MR/PR 目标分支,否则默认 main 或 master,可用 git merge-base --fork-point main HEAD || git merge-base --fork-point master HEAD 检测;不明确时询问用户。
- 检测改动源文件:git diff <base-branch> --name-only -- '*.cs',并过滤掉路径含 Test、Tests、.Tests、.Test 的测试文件;若无改动则停止并告知用户。
- 确定测试项目:优先用户指定,其次按命名约定匹配(如 MyProject -> MyProject.Tests),范围不清时运行整个解决方案或询问用户。
- 清理旧结果:rm -rf TestResults/。
- 运行测试并收集覆盖率:dotnet test <test-project-or-solution> --collect:"XPlat Code Coverage" --results-directory ./TestResults/。
- 构建文件过滤器:由改动文件提取基名,拼成 +*FileName1.cs;+*FileName2.cs 形式的字符串。
- 生成报告:dotnet reportgenerator -reports:"TestResults/**/coverage.cobertura.xml" -targetdir:"TestResults/CoverageReport" -reporttypes:"Html;TextSummary" -filefilters:"<filters>"。
- 展示结果:打印 TestResults/CoverageReport/Summary.txt,并按平台打开 HTML(Windows 用 start,macOS 用 open,Linux 用 xdg-open)。
适用场景:.NET 项目的增量代码覆盖率检查,尤其适合在提交或合并请求前聚焦改动文件的覆盖情况。
限制与提示:需已安装 dotnet test 与 reportgenerator 工具;大型解决方案建议缩小到特定测试项目以加快收集;-filefilters 支持通配符,按基名匹配可避免路径敏感问题。其他收费、平台支持等细节暂未提供。