我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

深度解析单元测试的代码覆盖率

来源:网络 更新时间:2024-04-23 10:51:15

在前几章我们已经深度讲解了单元测试和集成测试的基础知识。在本章中,我们将重点讲解代码覆盖率的概念和实战应用,以及使用Coverlet和ReportGenerator工具进行单元测试代码覆盖率的统计和报告生成。

引言

代码覆盖率是单元测试运行的度量值,通常以百分比表示,用于衡量代码被测试覆盖的程度。它是评估测试用例质量和代码健壮性的重要指标。常见的覆盖率包括语句覆盖率(Line Coverage)、分支覆盖率(Branch Coverage)、路径覆盖率(Path Coverage)等。不同类型的覆盖率可以帮助开发人员更全面地了解测试用例对代码的覆盖情况,从而改进测试策略和提高代码质量。

核心组件

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

什么是Coverlet?

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

什么是ReportGenerator?

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

代码覆盖率实战

我们在之前的项目中创建了Sample.Api和Sample.Repository用作我们单元测试和集成测试的Demo项目。接下来我们将使用这个项目进行单元测试覆盖。

创建xUnit测试项目,然后查看csproj的XML文件。


  
  
  
  

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

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

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

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

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

一个小tips:

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

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

同步命名空间功能

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

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

开始统计

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

然后执行下面这个命令。

dotnet test --collect:"XPlat Code Coverage"

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

查看一下执行完控制台输出。

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

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

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

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

生成报告

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

第一步要将ReportGeneratorNuGet包安装为.NET全局工具。

dotnet tool install -g dotnet-reportgenerator-globaltool

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

下面用命令行来演示一下。

导航到coverage.cobertura.xml xml报告文件下。

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

输出:

查看测试报告:

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

最后

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

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

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

?欢迎关注笔者公众号一起学习交流,获取更多有用的知识~

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