单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

这篇具有很好参考价值的文章主要介绍了单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

在前几章我们深度讲解了单元测试和集成测试的基础知识,这一章我们来讲解一下代码覆盖率,代码覆盖率是单元测试运行的度量值,覆盖率通常以百分比表示,用于衡量代码被测试覆盖的程度,帮助开发人员评估测试用例的质量和代码的健壮性。常见的覆盖率包括语句覆盖率(Line Coverage)、分支覆盖率(Branch Coverage)、路径覆盖率(Path Coverage)等,不同类型的覆盖率可以帮助开发人员更全面地了解测试用例对代码的覆盖情况,从而改进测试策略和提高代码质量。

核心组件

本文介绍如何通过 Coverlet 在单元测试中使用代码覆盖率和使用 ReportGenerator 生成报表。

什么是Coverlet

CoverletGitHub 上的开源项目,可为 C# 提供跨平台代码覆盖率框架,Coverlet.NET Foundation 的一部分,Coverlet 收集 Cobertura 覆盖率测试运行数据,用于生成报表。

什么是ReportGenerator?

ReportGenerator 将由 Cobertura 生成的覆盖率报表转换为各种格式的用户可读的报表。

代码覆盖率实战

我们在之前的项目中创建了Sample.ApiSample.Repository用作我们单元测试和集成测试的Demo项目,接下来我们用这个项目来做一下单元测试覆盖。

  • 创建xUnit测试项目
    然后看一下csprojXML文件
  <ItemGroup>
    <PackageReference Include="coverlet.collector" Version="6.0.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
    <PackageReference Include="xunit" Version="2.5.3" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
  </ItemGroup>

从上面可以看出xUnit的测试项目已经默认对coverlet.collector添加了支持

我们在讲解在单元测试中使用依赖注入时,用Sample.Repository做的单元测试,我们把之前的代码Copy一份,到新的测试项目,添加和讲解依赖注入时一样的配置。

然后添加对我们Sample.Repository的项目引用

NuGet\Install-Package Xunit.DependencyInjection -Version 9.1.0
NuGet\Install-Package Xunit.DependencyInjection.Logging -Version 9.0.0

单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

可以看到我们项目基本成型了,但是Copy过来的代码还是我们dotNetParadise.DependencyInjection测试依赖注入时那个类库。

一个小tips:

鼠标点击我们的测试项目dotNetParadise.CodeCoverage->右键->同步命名空间

单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

可以看到我们的命名空间已经被正确替换

同步命名空间功能

  • 使用时机: 你想要通过将文件拖动到新文件夹重构部分解决方案。

  • 操作原因: 你想要确保你的命名空间中的新文件夹结构保持最新。

开始统计

我们可以通过CMD命令进入测试项目类库的内

单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

然后执行下面这个命令

dotnet test --collect:"XPlat Code Coverage"

"XPlat Code Coverage" 参数是与 Coverlet 中的数据收集器对应的易记名称。 此名称是必需的,但不区分大小写。 若要使用 .NET 的内置代码覆盖率数据收集器,请使用"Code Coverage"

看一下执行完控制台输出

单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

通过控制台反馈我们得知了,生成了一个附件路径在
~\TestResults\2515646c-5845-4bfb-ae14-7e0bf4617b84\coverage.cobertura.xml

作为 dotnet test 运行的一部分,生成的 coverage.cobertura.xml 文件输出到 TestResults 目录 。 该 XML 文件包含结果。 这是一个依赖于 .NET CLI 的跨平台选项,非常适用于不可使用 MSBuild 的生成系统。

单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

简单解读一下
cobertura.xml代码覆盖率报告,提供了关于代码单元测试覆盖率的详细信息。其中包含了各种指标和数据,如以下几点:

  • line-ratebranch-rate 分别表示语句覆盖率和分支覆盖率,均为 0.5,表示被测试覆盖的比例为 50%。
  • lines-coveredlines-valid 分别表示被覆盖的代码行数和总代码行数。
  • branches-coveredbranches-valid 分别表示被覆盖的分支数和总分支数。
  • 在具体的类和方法级别,提供了各自的覆盖率、复杂度等信息,以及每行代码的覆盖情况(hits 表示执行次数,branch 表示是否为分支语句,condition-coverage 表示条件覆盖率)。

生成报告

上面提到了coverlet.collector是用来收集单元测试的指标的真正的报告是用 ReportGenerator生成。

第一步要将 ReportGenerator NuGet 包安装为 .NET 全局工具

dotnet tool install -g dotnet-reportgenerator-globaltool

单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

有很多种生成报告的方法如 命令行,添加netconfig等大家可以自行选择

下面用命令行来演示一下

导航到coverage.cobertura.xmlxml 报告文件下

reportgenerator -reports:"coverage.cobertura.xml" -targetdir:"coveragereport" -reporttypes:html

输出:

单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

查看测试报告:

我的路径:
TestResults\b5595744-2bb9-42ab-8c2e-60d544b4b04f\coveragereport

单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

最后

通过创建测试项目并使用 Coverlet 进行代码覆盖率统计,我们可以得到详细的覆盖率报告。生成的 coverage.cobertura.xml 文件提供了各种指标和数据,如语句覆盖率、分支覆盖率等,帮助开发团队评估代码的测试覆盖情况。

随后,通过 ReportGenerator 工具生成报表,我们可以将覆盖率数据转换为易读的报表形式,帮助团队更直观地了解测试覆盖情况,进一步优化测试策略和提高代码质量。

通过以上实践,我们能够更有效地利用代码覆盖率工具,提升单元测试的质量和效率,从而构建更健壮的软件系统。

😄欢迎关注笔者公众号一起学习交流,获取更多有用的知识~
单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !文章来源地址https://www.toymoban.com/news/detail-856191.html

  • 单元测试代码覆盖率
  • 本文完整源代码

到了这里,关于单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 特性介绍 | MySQL 测试框架 MTR 系列教程(二):进阶篇 - 内存/线程/代码覆盖率/单元/压力测试

    作者:卢文双 资深数据库内核研发 序言: 以前对 MySQL 测试框架 MTR 的使用,主要集中于 SQL 正确性验证。近期由于工作需要,深入了解了 MTR 的方方面面,发现 MTR 的能力不仅限于此,还支持单元测试、压力测试、代码覆盖率测试、内存错误检测、线程竞争与死锁等功能,因

    2024年02月03日
    浏览(47)
  • springboot项目使用Junit5 + mockito + jacoco 实现单元测试以及代码覆盖率检查

    在创建springboot项目时会默认添加spring-boot-starter-test依赖,其中已经包含了junit、mockito依赖,根据springboot版本的不同junit和mockito的版本也会有所不同 先说一下各自功能: junit只说一点,junt4和junit5的注解不同,使用方式略有差异,其他不赘述了,基本用法都懂。 mockito是mock的

    2023年04月23日
    浏览(55)
  • IDFA 单元测试以及单元测试覆盖率步骤

    1、新建java类 随意选择java类文件,新建一个Java类CountVowel,用来统计字符串中元音的个数,代码如下: 2、生成测试类 一)、对写好的类新建测试类,有以下两种方法: 将鼠标光标移动到类名上,使用 Alt+Enter 组合键,如下图,选择 Create Test ,从而新建一个测试类; 右键点

    2024年02月16日
    浏览(40)
  • 如何计算单元测试的覆盖率

    单元测试的覆盖率有:语句覆盖率(即行覆盖率)、分支覆盖率、条件覆盖率、分支条件覆盖率、路径覆盖率等。 语句覆盖率 所谓语句就是那些非分支、非判断的语句。 计算公式:程序执行到的语句总数 / 全部语句的总数 分支覆盖率 有判定语句的地方都会出现2个分支。

    2024年01月21日
    浏览(47)
  • java 单元测试覆盖率调研

    根据网上的资料搜索发现,现在常用的 java 单元测试覆盖率工具主要有: Emma Cobertura Jacoco Clover(商用) 工具 Jacoco Emma Cobertura 原理 使用 ASM 修改字节码 修改 jar 文件,class 文件字节码文件 基于 jcoverage,基于 asm 框架对 class 文件插桩 覆盖粒度 行,类,方法,指令,分支 行,类

    2024年02月12日
    浏览(38)
  • Sonarqube-8.9版本测试单元测试覆盖率

    junit testNG Spock Jacoco Cobertura SonarQube 不会运行测试或生成报告。要在分析中包含覆盖结果,需要设置第三方覆盖工具来生成报告并配置 SonarQube 以导入这些报告。 生成单元测试覆盖率需要按照以下步骤操作: SonarQube 使用导入的覆盖率报告中的覆盖行和可执行行(或要覆盖的行

    2024年02月02日
    浏览(56)
  • 13.Springboot整合junit5单元测试与生成单元测试覆盖率

    现在基本大公司都要求单元测试了,保证我们代码得质量,而我司更是要求覆盖率要达到60%以上,所以搞一下。 这里有两个方法: 1.使用maven自带得test,idea右侧maven模块执行项目下得test 2.使用cmd命令,在你的项目pom文件所在目录 ,打开cmd,执行如下: 结果如下:打开site文

    2024年02月16日
    浏览(36)
  • maven sonar 扫描单元测试覆盖率为0,但是单元测试数不为0

    最初配置如下: sonar 扫描后的单元测试覆盖率为0。但是但与测试数量不为0. 而配置的 sonar : 单元测试数基于 maven-surefire-plugin 插件 单元测试覆盖率基于 jacoco-maven-plugin 插件。 发现 maven 执行后没有 jacoco.exec 文件。导致 sonar 单元测试覆盖率为 0。并且没有下面的 jacoco 结果文

    2024年02月11日
    浏览(35)
  • 【Maven】单元测试、统计、覆盖率相关插件使用介绍

    maven-surefire-plugin 是 maven 执行单元测试的插件,不显性配置也可以直接使用。 这个插件的 surefire:test 命令会默认绑定 maven 执行的 test 阶段。 执行结束后,默认在 target/surefire-reports 目录下会生成 txt 和 xml 两种格式的结果,不利于直观展示,需要结合其它插件一起使用。 如果

    2024年02月08日
    浏览(38)
  • Python单元测试:一步步了解测试框架、测试用例和覆盖率分析

    在软件开发中,单元测试是一个非常重要的环节。它可以确保你的代码能够正常运行,并且在将来的修改中不会出现问题。在Python中,单元测试是非常容易实现的。本文将介绍Python单元测试的所有知识点,包括测试框架,测试用例,测试装置,测试套件和覆盖率分析。 Pytho

    2024年02月04日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包