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

2023-10-27

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

测试覆盖率,一般来说主要是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,这时候就可以比较直观的查看到统计的各项覆盖率。
在这里插入图片描述
这里每行链接都是可以点击的,进去后就可以看到更详细的覆盖率,同样通过颜色差异来进行显示。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 五种边缘检测算法(附代码)

    一 Roberts 边缘检测算子 Roberts边缘检测算子根据任意一对互相垂直方向上的差分可用来计算梯度的原理 采用对角线方向相邻两像素之差 即 然后根据式 1 9 2 计算出Roberts的梯度幅度值 它们的卷积算子为 Roberts检
  • mysql tmp下#sql_xxx_0.MYD 类文件占满空间的经历

    作为一名全职运维 随时会碰到各种问题 今天晚上收到紧报警 一台数据库服务器磁盘空间使用快速从80 使用率到90 我们的数据库都是 gt 2T的磁盘 意识到这肯定是比较严重问题马上上线处理 状况如下 root mysql node1 tmp
  • 实用高效的寻路算法——A*寻路算法的实现及优化思路

    前言 寻路是游戏比较重要的一个组成部分 因为不仅AI还有很多地方 例如RTS游戏里操控人物点到地图某个点 然后人物自动寻路走过去 都需要用到自动寻路的功能 本文将介绍一个经常被使用且效率理想的寻路方法 A 寻路算法 并且提供额外的优化思路
  • CMake中list的使用

    CMake中的list命令用于列表操作 其格式如下 Reading list LENGTH
  • Windows部署Alpaca-lora

    Alpaca Lora 是一个轻量级的语言模型 可以实现基本的语言类对话 本文先后在两台机器上进行了配置 行文旨在介绍将此模型部署至Windows系统上时所遭遇的各种困扰 机器1配置 NVIDIA TITAN Xp 机器2配置 RTX309
  • Spring是什么?

    什么是Spring 我知道你现在可能迫不及待地想要开始编写Spring应用了 我向你保证 在本章结束之前 你肯定能够开发一个简单的Spring应用 但首先 我将使用Spring的一些基础概念为你搭建一个舞台 帮助你理解Spring是如何运转
  • ubuntu下nginx停止、启动、重启

    转载自 https www cnblogs com xiaoL p 6964217 html nginx s reload 修改配置后重新加载生效 nginx s reopen 重新打开日志文件 nginx t c path to ngin
  • python标书制作辅助docx

    from docx import Document def handle path r d a docx 表格在哪个位置 文件路径 document Document path 读入表格文件 tables document tables 获
  • 通向Golang的捷径【7. 数组和 slice】

    从本章开始 将学习一些可包含一组元素的数据结构 也被称为数据集合 比如数组 切片 slice 和 map 这很显然是受到 Python 语言的影响 数组类型会使用 符号 这也是大多数编程语言的基本类型 Go 语言的数组与其他语言基本类似 但
  • android常见的monkey命令

    adb shell monkey p 包名 v 9000000 adb shell ps grep monkey 查找到monkey pid adb shell kill 刚才查到的进程号 指定一个包 adb shell monkey p
  • PySpark 连接Hive

    文章目录 简介 环境搭建与效果演示 更细节的搭建方法 搭建HDFS Spark或hive的前提 已经有了远程可访问的测试集群 搭建hadoop2 7 2 修改hadoop配置 格式化hdfs 测试 搭建spark 2 4 5 解压hive
  • C++成员函数末尾const关键字…

    原文地址 C 成员函数末尾const关键字的作用 作者 olym 1 gt 尽管函数名和参数列表都相同 void foo const成员函数是可以与void foo 并存的 可以形成重载 我们假设调用语句为obj foo 如果obj为non
  • git常用命令与常见面试题总结

    目录 1 git框架介绍 2 列举工作中常用的几个git命令 3 提交时发生冲突 如何解决 4 新建git功能分支的步骤 5 说明GIT合并的两种方法以及区别 6 Git提交代码的步骤 7 idea集成git 7 1 File gt set
  • IDEA开发及运行第一个Android项目

    IDEA自动下载SDK Gradle 保证能访问网络 原来eclipse能使用的sdk 配到idea报错 就换成自动下载最新的了 之前没成功可能是我防火墙禁用了上网 新建项目 提示安装SDK 等待下载完成 继续建项目 选择手机或平板及目标设
  • JVM实战:JVM内存分配策略

    JVM运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域 这些区域都有各自的用途 以及创建和销毁的时间 有的区域随着虚拟机进程的启动而存在 有些区域则依赖用户线程的启动和结束而建立和销毁 Ja
  • JAVA学习笔记——内部类

    目录 基本概念 使用内部类访问对象状态 内部类的特殊语法规则 局部内部类 访问外部变量 匿名内部类 静态内部类 基本概念 内部类 inner class 是定义在另一个类中的类 主要特点有 内部类方法可以访问该类定义所在的作用域中的数据 包
  • QString转化成其他字符串

    1 QChar 转char char xxx QChar unicode 2 QString 转 String String xxx QString toStdStrng 3 QString转 char 先将 QString 转为标准库中的
  • 【手把手教你写服务器】客户端程序和服务器程序的简单实现

    文章目录 1 基本TCP客户 服务器程序的套接字函数 2 server c 3 client c 1 基本TCP客户 服务器程序的套接字函数 下图中各个函数的功能 参数及返回值自行查阅 UNIX网络编程卷1 套接字联网API 第4章 2 s
  • Python字符串与Bytes之间的互相转换

    Python字符串与Bytes之间的互相转换 byte转字符串 方式一 data b x31 x32 x33 print data b 123 strdata data decode gbk print strdata 123 strdat
  • .Net core基于xUnit的单元测试查看测试覆盖率

    写代码如何保证代码质量 基本大家都知道要做单元测试 那如何知道你单元测试是不是测试到了所有代码场景呢 这就要通过测试覆盖率来体现了 测试覆盖率 一般来说主要是Line代码行数覆盖率 同样还会有Branch分支覆盖率 Method方法覆盖率等