写代码如何保证代码质量,基本大家都知道要做单元测试,那如何知道你单元测试是不是测试到了所有代码场景呢,这就要通过测试覆盖率来体现了。

测试覆盖率,一般来说主要是Line代码行数覆盖率,同样还会有Branch分支覆盖率,Method方法覆盖率等,主要是各自的侧重点不同,但只要Line的覆盖率是100%,其它几项的覆盖率也必定是100%。

如何创建单元测试,这里就一带而过,就是新建项目,筛选测试,然后按自己喜好选择一个测试框架,这里就选了xUnit

具体单元测试怎么写,这里就不说了,只说下如何查看你的代码测试覆盖率。

Visual Studio
Visual Studio本身就支持查看测试覆盖率,具体就是测试--分析所有测试的代码覆盖率

执行完毕后,可以看到代码覆盖率结果

可以通过点击展开,查看都是哪些代码没有被覆盖,最终到代码层次时,会显示代码覆盖色,通过颜色差异,可以清楚的看到哪些代码没被单元测试覆盖。

coverlet
要用这个首先需要在单元测试项目中添加引用:coverlet.collectorcoverlet.msbuild,在Nuget资源管理器中进行添加即可,之后就可以通过以下指令在PowerShell中执行单元测试

dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:Exclude="[xunit*]\*" /p:CoverletOutput="../TestResults/"

CoverletOutput对应的是报告生成路径,../TestResults/是为了保持和VS的路径名称一致,如果你的sln文件与默认层次结构不一致,那么路径要进行相应调整。

PS中只能看到单元测试覆盖率的一个汇总结果,然后这个覆盖率数字呢和VS统计的还有一些差异,当然这里我们也就不关注了,毕竟差异不大,而且测试覆盖率一般只要达到80%就可以认为单元测试已经足够。

上面的统计结果显然不能帮助我们提升测试覆盖率,这时候就需要reportgenerator来查看究竟哪些代码没被覆盖。注意reportgeneratorCLI工具,在nuget上会有对应的指令,该指令同样可以在PS中执行。

dotnet tool install --global dotnet-reportgenerator-globaltool --version 5.0.4

注意.Net core版本不同,使用的reportgenerator版本也不同,dotnet-reportgenerator-globaltool是针对.Net core 3.x及以上版本的,.Net core 2.x版本对应的是dotnet-reportgenerator-cli

安装完reportgenerator之后,就可以通过指令生成html报告页面,reports对应的是前面dotnet test指令生成的具体汇总xml,targetdir为你最终要生成的html位置。

reportgenerator "-reports:.\TestResults\coverage.netcoreapp3.1.cobertura.xml" "-targetdir:.\TestResults\html" -reporttypes:HTML;

最新版的reportgenerator需要.Net 6.0版本,如果没安装过VS2022的话,会有相应的提示。

你可以到微软的官网地址进行下载,然后只需要下载安装runtime就行

上述指令执行完成后,可以到相应的目录打开index.htm,这时候就可以比较直观的查看到统计的各项覆盖率。

这里每行链接都是可以点击的,进去后就可以看到更详细的覆盖率,同样通过颜色差异来进行显示。

.Net core基于xUnit的单元测试查看测试覆盖率相关推荐

  1. TDD 测试驱动开发工具、框架、快捷键和测试覆盖率

    文章目录 TDD 测试驱动开发工具.框架.快捷键和测试覆盖率 TDD 测试驱动开发工具与框架 资源链接 IntellijIdea 快捷键 Intellij 中查看测试覆盖率 Intellij 的 Li ...

  2. Tessent scan ATPG(8) Debug low test coverage(低测试覆盖率的原因及debug方法)

    如何利用工具提高测试覆盖率 low coverage 的原因 每个fault点的可控性和可测性; 部分设计规则违例会影响测试覆盖率 好的电路和错误的电路之间必须可以观测到不同; 那些没有被detect ...

  3. vs2017c语言单元测试,vs2017单元测试没反应,检测出错误,有关详细信息,请查看“测试输出”窗口...

    vs2017单元测试,.NET Core新建项目有此项目, 单元测试代码,发现[Fact]无法识别,测试项目没有引用XUnit,好吧,Nuget此程序集 namespacexunitProject { ...

  4. ios 单元测试覆盖率怎么查看_iOS 覆盖率检测原理与增量代码测试覆盖率工具实现...

    背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...

  5. Xunit编写单元测试程序java_ASP.NET Core中使用xUnit进行单元测试

    单元测试的功能自从MVC的第一个版本诞生的时候,就是作为一个重要的卖点来介绍的,通常在拿MVC与webform比较的时候,单元测试就是必杀底牌,把webform碾压得一无是处. 单元测试的重要性不用多 ...

  6. tSQLt单元测试的测试驱动数据库开发(TDDD)基础

    This article talks about core concepts of test-driven database development followed by creating simp ...

  7. 3. 使用xUnit进行单元测试

    实现.NET Core时,xUnit可用于创建单元测试,.NET Core团队使用了该产品.xUnit是一个开源实现方案,创建NUnit 2.0的开发人员创建了它.现在,.NET Core命令行界面支 ...

  8. 编写基于Property-based的单元测试

    编写基于Property-based的单元测试 作为一个开发者,你可能认为你的职责就是编写代码从而完成需求.我不敢苟同,开发者的工作是通过软件来解决现实需求,编写代码只是软件开发的其中一个方面,编写可 ...

  9. netbeans7.4_使用NetBeans 7.4 beta提示进行更好的基于JUnit的单元测试

    netbeans7.4 在上一篇文章中 ,我写了NetBeans 7.4 beta中提供的提示 ,这些提示提高了开发人员避免Java异常处理带来的讨厌的运行时问题的能力. 在本文中,我将探讨如何使用N ...

最新文章

  1. 上拉电阻和下拉电阻_硬件基础:下拉电阻和上拉电阻如何工作
  2. PHP 连接 MSSQL用port时候的注意事项
  3. 内置付费 inapp purchase and Error Domain=SKErrorDomain Code=0 “Cannot connect to iTunes Store”错误...
  4. [恢]hdu 1259
  5. java安卓获取mac_android开发分享以编程方式获取Android设备的MAC
  6. Marketing Cloud里如何创建新的query视图并设置为默认显示界面
  7. 监控linux时间不对,shell 计算故障时间 配合web监控
  8. 英伟达RTX 3080值不值得抢?在TensorFlow上训练了卷积网络
  9. 哪吒汽车在售车型涨价3000-5000元
  10. 便利蜂发布双11战报:当天外卖订单最多的是这个城市
  11. html5 “拖放”
  12. linux的/proc文件_Linux中“ / proc”文件系统指南
  13. Metro风格用户界面设计原则
  14. 使用百度文字识别API进行图片中文字的识别
  15. 第八届蓝桥杯Java A组决赛第一题
  16. ansys apdl变量基本操作
  17. 计算机网络共享后如何设置不输出密码,取消电脑网络共享安全账号密码直接进入的设置方法...
  18. 【Python】Python-OpenCV实时处理视频
  19. 如何让win XP实现自动登陆
  20. Verilog专题(二十二)Lemmings1

热门文章

  1. 详解数据存储芯片AT24C02的应用及编程
  2. 安大计算机图形学实验——二维图形变换
  3. Spring Cloud Config 客户端启动错误(Fetching config from server at : http://12)
  4. php停车场收费系统,停车场收费系统C语言版
  5. ubuntu“更换介质:请把标有…… DVD 的盘片插入驱动器
  6. 应用全攻略 10个常用数字证书应用实例
  7. JavaSE·Map的实现类
  8. UVa 1366 - Martian Mining (dp)
  9. 5 分钟,教你用 Python 制作一个生日提醒!
  10. ES基本概念及废除type 官网资料 - 阅读有困难的加了翻译 - 我只是官网的搬运工