前言

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

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

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

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

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

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

C#工具库

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

涵盖的范围也不小

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

这些工具分别是:

依赖

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

dotnet tool install -g dotnet-reportgenerator-globaltool

测试覆盖率

以 ImageGlider 项目为例

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

# 生成测试覆盖率报告
dotnet test --collect:"XPlat Code Coverage" --results-directory ./temp/TestResults # 使用 reportgenerator 生成HTML报告
reportgenerator -reports:"./temp/TestResults/*/coverage.cobertura.xml" -targetdir:"./TestResults/CoverageReport" -reporttypes:Html

生成的测试报告路径示例

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 是没有覆盖到的

总之非常方便

VSCode

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

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

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

Rider

我是先在 VSCode 里发现的

我就在想

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

结果测了一下,还真有

菜单 Tests -> Cover Unit Tests

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

小结

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

分析C#项目的单元测试覆盖率,提高代码质量的更多相关文章

  1. Findbug在项目中的运用--提高代码质量

     FindBugs是一个静态分析工具,它检查类或者 JAR文件,将字节码与一组缺陷模式进行对比以发现可能的问题.有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析 第一 手动安装 在Ec ...

  2. 提高代码质量 CheckStyle FindBugs PMD

    提高代码质量-工具篇 注:这是一篇翻译文章,原文:How to improve quality and syntax of your Android code,为了理解连贯,翻译过程中我修改了一些陈述 ...

  3. Web前端开发最佳实践(11):使用更严格的JavaScript编码方式,提高代码质量

    前言 JavaScript语言由于其固有的灵活性,所以导致开发者可以写出很多诡异的代码,甚至一些较为正常的特性,如类型隐式转换.this的指代等等,也会让刚接触此语言的开发者头大不已.尤其是那些熟知其 ...

  4. (转)提高代码质量---one

    1. 摘要 这是烂代码系列的第二篇,在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣. 在发布了关于烂代码的那些事(上)之后,发现这篇文章竟然意外的很受欢迎,很多人也描(tu)述(cao ...

  5. 用 Eclipse 插件提高代码质量

    如果能在构建代码前发现代码中潜在的问题会怎么样呢?很有趣的是,Eclipse 插件中就有这样的工具,比如 JDepend 和 CheckStyle,它们能帮您在软件问题暴露前发现这些问题.在 让开发自 ...

  6. SonarQube与Jenkins结合提高代码质量

    首先,为什么需要SonarQube? 1.WriteClean Code 1)全局健康报告  2)关注新增的问题  3)强制QualityGate 4)Issue详情及建议- 详情参考:https:/ ...

  7. 测试驱动开发(Test-Driven Development,简称TDD)--单元测试-->提高代码质量

    !!! 1.估算和做项目计划时要算上单元测试时间 2.开发之前写单元测试代码 盖房子的时候,工人师傅砌墙,会先用桩子拉上线,以使砖能够垒的笔直,因为垒砖的时候都是以这根线为基准的.TDD就像这样,先写 ...

  8. 提高代码质量系列之二:重构小技巧——if篇

    前言: if,相信是童鞋们使用的最频繁的关键字了,而且很多时候,我们使用的if都是在无意识的状态下随手而为.键入if,两下回车(我使用了resharper,可以自动编排if的格式),再信手写下我们需要 ...

  9. linux 提高代码质量的工具

    很多IT公司对于软件开发都有严格的分工,这包括设计.测试.服务支持等等.但是,我一直都认为只有开发者才是真正对软件质量负责的人.没有好的软件设计,软件质量基本上是无从谈起.当然,要做到这一点是需要额外 ...

  10. 使用flow捕获js错误提高代码质量

    本文将介绍Flow及其主特性.下面分别从如何安装设置,如何添加类型注释,如何在运行时自动去掉注释等方面来介绍. 安装 目前Flow兼容的操作系统有Mac OS X,Linux(64位),Windows ...

随机推荐

  1. 卷积神经网络(CNN)模型

    一.概述   卷积神经网络(Convolutional Neural Network, CNN)是一种深度学习模型,广泛应用于图像识别.计算机视觉等领域.其设计理念源于对生物视觉皮层神经机制的模拟,核 ...

  2. Jenkins 起服务包后自动退出

    今天使用Jenkins来做一个定时更新并启java服务包的任务,搞了挺久. 比较坑爹的就是,我的jar包有十几个,各个包也比较大,每次启动都要好久. 但启完最后一个包之后,我去,Jenkins就结束了 ...

  3. 最炫酷的企业 AI 助手来啦(含前端源码)!

    最近越来越多的企业开始将 MaxKB 在他们企业当中的应用场景官宣了.有时候我们会疑问,这真的是 MaxKB 做的吗? MaxKB 你怎么还能动的? 案例一:医疗资源小助手开场白 效果展示: 源码: ...

  4. Re:prime 关于质数的算法

    Re:prime 关于质数的所有算法 绪言 所有代码若无说明,均采用快读模板 关于质数,无非就两大类: 判断一个数字是不是质数 找出[1,n]中所有的质数 先讲1: Judge 判断x是不是质数 根据 ...

  5. Spring扩展接口-CommandLineRunner、ApplicationRunner

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  6. qt激光加工软件开发——介绍

    20年毕业后,先是从事qt+c++开发,而后从事mfc开发,今年步入新的公司,着手开发一版新的激光设备加工软件 激光加工软件所具备的功能: 轴的控制:主要包括XYZ三个轴,品牌:ACS.固高.Gali ...

  7. Coze工作流实战:一键生成像素风格视频

    前言 最近像素画风的视频非常火,一个视频浏览量超过10w+的也有很多. 那么这个是怎么实现的? 其实,通过AI工作流可以比较简单地实现这样的短视频. 今天给大家分享一下,我是如何搭建工作流实现的. 欢 ...

  8. ko在数栈中的应用

    ​ 引言 一项技术能得以广泛运用,其中的一个关键点在于工程化.前端从最开始的简单写写网页和样式,发展为需要处理复杂的逻辑,伴随而来的是问题是相关文件越来越多,简单在网页中引用已经解决不了问题,需要相关 ...

  9. Visual Components 自定义工具创建吸附接口

    添加模型 打开VC,添加机器人模型 IRB 120, 再添加自定义工具模型(这里用基础模型的圆柱充当) 给自定义工具添加 "坐标框A" 和 "坐标框B" 切换到 ...

  10. Java源码分析系列笔记-11.CopyOnWriteArraySet

    目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. 构造方法 3.1.1. 底层使用CopyOnWriteArrayList实现 3.2. add方法 3.2.1. 转调CopyOnWrit ...