0

0

C# 生成代码覆盖率报告文件 C#如何操作和合并单元测试生成的coverage文件

幻夢星雲

幻夢星雲

发布时间:2026-02-28 09:44:36

|

373人浏览过

|

来源于php中文网

原创

用reportgenerator将coverage.json转html报告:先装dotnet-reportgenerator-globaltool,再运行reportgenerator "-reports:路径" "-targetdir:输出目录",注意路径无空格、文件存在且用绝对路径,浏览器需通过http服务打开html。

c# 生成代码覆盖率报告文件 c#如何操作和合并单元测试生成的coverage文件

dotnet test 生成的 coverage.json 怎么导出为 HTML 报告

默认 dotnet test 不生成可视化报告,只输出覆盖率数据(如 coverage.json),需要额外工具转换。核心是用 coverlet.collector + reportgenerator 组合:前者负责采集,后者负责渲染。

常见错误是只装了 coverlet.msbuild 或漏配 --collect:"XPlat Code Coverage",导致根本没生成 coverage.json

  • 测试项目需引用 coverlet.collector(NuGet 包,v6.0+ 推荐)
  • 运行命令必须带 --collect:"XPlat Code Coverage",例如:
    dotnet test --collect:"XPlat Code Coverage" --results-directory ./test-results
  • 生成的 coverage.json 默认在 ./test-results/coverage/ 下,不是根目录
  • 若用 ReportGenerator CLI,需全局安装:dotnet tool install -g dotnet-reportgenerator-globaltool

多个 test project 的 coverage.json 如何合并

每个 dotnet test 调用会生成独立的 coverage.json,直接丢给 reportgenerator 就能自动合并——它支持多输入路径,无需手动拼接 JSON。

容易踩的坑是路径写错或遗漏文件名通配符,导致只读到一个文件。

AI Room Planner
AI Room Planner

AI 室内设计工具,免费为您的房间提供上百种设计方案

下载
  • 确保所有 coverage.json 路径都明确指定,例如:
    reportgenerator "-reports:./proj1/test-results/coverage/coverage.json;./proj2/test-results/coverage/coverage.json" "-targetdir:./coverage-report"
  • 路径中不能有空格,否则需用引号包裹整个 -reports: 参数值
  • 如果某个项目没跑测试,对应路径下没有 coverage.jsonreportgenerator 会报错退出,建议先 lsdir 确认存在
  • 合并时不会去重 assembly,同名 DLL 多次出现会导致统计偏差(但实际影响小,因 coverlet 按 module + method 唯一标识)

reportgenerator 输出的 HTML 报告打不开或空白

最常见原因是浏览器安全策略阻止本地 file:// 协议加载 JS 资源(比如 index.html 双击打开),不是代码问题。

另一个原因是 reportgenerator 版本太低(

  • http-serverpython3 -m http.server 启个本地服务访问,避免 file:// 限制
  • 检查 reportgenerator 版本:reportgenerator -version,推荐 v5.1.10+ 或 v5.3+(对 .NET 7/8 支持更稳)
  • 生成后检查 ./coverage-report/index.html 是否真实存在,且大小 >1KB;若只有几百字节,大概率是 schema 不匹配
  • -reporttypes:HtmlInline_AzurePipelines_Dark 可减少外部依赖,适合 CI 场景

CI 环境里如何稳定生成并上传 coverage 报告

CI(如 GitHub Actions、Azure Pipelines)里路径不稳定、权限受限、无 GUI,导致本地能跑的命令失败。

关键不是“怎么生成”,而是“怎么让生成步骤不被环境干扰”。比如 Windows CI 默认禁用 long path,可能卡在写入深层目录。

  • 统一用绝对路径,避免 ./ 相对路径歧义;GitHub Actions 中可用 ${{ github.workspace }}
  • 显式设置 COVERLET_DISABLE_APPDOMAIN=1 环境变量,防止 .NET Framework 兼容层干扰
  • --settings coverlet.runsettings 文件控制 include/exclude,避免第三方 DLL 拉低覆盖率(如 <include>**/MyApp.*.dll</include>
  • 上传前压缩 coverage-report/ 目录,比传单个 HTML 更可靠(有些 CI 插件只认 zip)

真正麻烦的不是合并或生成,是不同 SDK 版本下 coverlet.collectorSystem.Private.CoreLib 的覆盖行为不一致——有时候跳过,有时候报错,得靠 [ExcludeFromCodeCoverage] 手动绕过。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

450

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

326

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

528

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

494

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

638

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5831

2023.08.17

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

11

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.4万人学习

C 教程
C 教程

共75课时 | 5万人学习

C++教程
C++教程

共115课时 | 19.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号