首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分析C#项目的单元测试覆盖率,提高代码质量

分析C#项目的单元测试覆盖率,提高代码质量

作者头像
郑子铭
发布2025-09-02 17:43:01
发布2025-09-02 17:43:01
12500
代码可运行
举报
运行总次数:0
代码可运行

前言

正如我在前一篇[1]介绍 ImageGlider[2] 的文章里预告的那样,这篇同样属于那套「C# + 自动化发布」开发流程的系列分享,继续把踩过的坑和总结的经验都记录下来,大家一起少走弯路。

单元测试的重要性不用我多说了吧?😄

覆盖率,保证了单元测试的广度和有效性——它能帮助开发者发现遗漏的逻辑分支,避免“测试了但其实没测到”的尴尬场面

特别是在如今的AI编程时代,完善的测试可以让AI自动验证功能的实现结果

刚好 C# 拥有非常完善的基础设施,这种功能丰富的语言,特别适应 AI 时代,我有预感,dotnet 平台在 AI 时代未来可期😁

要进行覆盖率测试,方法有非常多,一开始我使用了一个第三方工具来生成 HTML 报告,后面发现 VSCode、VS、Rider 这些 IDE 里都可以🤣

C#工具库

今年我陆续用 C# 开发了不少工具

涵盖的范围也不小

感觉都可以组成一个小工具库了

这些工具分别是:

依赖

使用 dotnet-reportgenerator-globaltool 工具可以生成 HTML 报告

代码语言:javascript
代码运行次数:0
运行
复制
dotnet tool install -g dotnet-reportgenerator-globaltool

测试覆盖率

以 ImageGlider 项目为例

使用以下命令分析项目的单元测试覆盖率,并生成测试报告网页

代码语言:javascript
代码运行次数:0
运行
复制
# 生成测试覆盖率报告
dotnet test --collect:"XPlat Code Coverage" --results-directory ./temp/TestResults

# 使用 reportgenerator 生成HTML报告
reportgenerator -reports:"./temp/TestResults/*/coverage.cobertura.xml" -targetdir:"./TestResults/CoverageReport" -reporttypes:Html

生成的测试报告路径示例

代码语言:javascript
代码运行次数:0
运行
复制
temp\TestResults\4eaa9684-a3b6-4b2a-81ac-d75e1e375e4b\coverage.cobertura.xml

直接打开这个网页就可以看到覆盖率的报告了

HTML 报告

非常详细

总览

查看详细覆盖率

这里可以调整分组模式

默认是 By assembly

可以改成 By namespace ,命名空间模式又分 level 1 和 level 2

其中 Line coverage 和 Branch coverage 都是可以筛选的

项目大点的话,建议选择 By Namespace level 2 ,比较直观

方法的测试覆盖率

点击具体的类,跳转到方法覆盖率页面

这里可以看到哪个方法没写测试

或者哪些 case 是没有覆盖到的

总之非常方便

image
image

image

VSCode

在 tests 目录上右键,运行覆盖率测试

很快就会在各个目录上出现类似手机电池的图标(好可爱😄)

可以很方便地看到各个项目、各个代码文件的测试覆盖率

Rider

我是先在 VSCode 里发现的

我就在想

VSCode 都有的功能,老牌 C# IDE 的这个 Rider,应该更加有吧

结果测了一下,还真有

菜单 Tests -> Cover Unit Tests

这个功能也不错,还能导出 HTML 什么的

小结

总之,通过dotnet-reportgenerator-globaltool和VSCode、VS、Rider等IDE的内置功能,我们可以轻松分析C#项目的单元测试覆盖率,帮助提升代码质量和测试有效性。

参考资料

[1]

前一篇: https://blog.deali.cn/p/csharp-aot-imageglider

[2]

ImageGlider: https://github.com/star-plan/image-glider

[3]

视频剪辑工具 Clipify: https://blog.deali.cn/Blog/Post/6a903b1c6fb2487f

[4]

AI 文章发布工具 StarBlog Publisher: https://blog.deali.cn/Blog/Post/f41b7410d59aa6b0

[5]

图标生成工具 SharpIco: https://blog.deali.cn/p/sharpico-pure-csharp-zero-dependency-ico-generator

[6]

多功能图片处理工具 ImageGlider: https://blog.deali.cn/p/csharp-aot-imageglider

[7]

PDF 目录提取工具 PdfTocExtractor: https://github.com/star-plan/pdf-toc-extractor

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • C#工具库
  • 依赖
  • 测试覆盖率
    • HTML 报告
    • 总览
    • 查看详细覆盖率
    • 方法的测试覆盖率
  • VSCode
  • Rider
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档