一、概念

单元测试的覆盖率有:语句覆盖率(即行覆盖率)、分支覆盖率、条件覆盖率、分支条件覆盖率、路径覆盖率等。

  • 语句覆盖率
    所谓语句就是那些非分支、非判断的语句。
    计算公式:程序执行到的语句总数 / 全部语句的总数

  • 分支覆盖率
    有判定语句的地方都会出现2个分支。
    计算公式:程序执行到的分支总数 / 全部分支总数

  • 条件覆盖率
    分支覆盖率与条件覆盖率有细微差别,条件覆盖率在判定语句的组合上有更细的划分。判定结果为True 或 False即为一个条件,例如: a = 1,依据判定的结果(True 或 False)可作为2个条件。再举个例子,代码如下:

        public void demo(int aa, int bb) {int a = aa;int b = bb;if (a == 1 && b = 1) {...}}
    

    以上代码中总共有多少个条件呢?a == 1有 True 或 Fasle 2 个条件,b == 1 同样有 True 或 False 2个条件,所以,总共有 4 个条件。

    计算公式:程序执行到的条件总数 / 全部条件总数

  • 分支条件覆盖率
    分支条件覆盖率是根据分支覆盖率和条件覆盖率得出的。
    计算公式:分支覆盖率分子/分母 + 条件覆盖率分子/分母,如:1/4 + 2/6 = 1+2 / 4+6 = 3/10

  • 路径覆盖率
    程序从开始到结束的过程为路径
    计算公式:程序执行的路径数 / 全部路径数

二、计算覆盖率

我们来基于下边的代码段来进行详细的说明,如下:

    public void demo(int aa, int bb) {int a = aa; // 语句1int b = bb; // 语句2if (a == 0 && b == 0) {System.out.println("a = 0 and b = 0"); // 语句3} else if (a == 1 || b == 1) {System.out.println("a = 1 or b = 1"); // 语句4} else {System.out.println("a = " + a+ ", b = " + b); // 语句5}}

让我们来分别计算下以上的代码段中的语句总数、分支总数、条件总数、路径总数。

  • 语句总数

    总共有 5 条语句

    序号 描述
    语句1 int a = aa
    语句2 int b = bb
    语句3 System.out.println(“a = 0 and b = 0”)
    语句4 System.out.println(“a = 1 or b = 1”)
    语句5 System.out.println("a = " + a+ ", b = " + b)
  • 分支总数

    总共有 4 条分支

    序号 描述
    分支1 a == 0 && b == 0 判定结果为 True
    分支2 a == 0 && b == 0 判定结果为 False
    分支3 a == 1 || b == 1 判定结果为 True
    分支4 a == 1 || b == 1 判定结果为 False
  • 条件总数

    总共有 8 个条件

    序号 描述
    条件1 a == 0 判定结果为 True
    条件2 a == 0 判定结果为 False
    条件3 b == 0 判定结果为 True
    条件4 b == 0 判定结果为 False
    条件5 a == 1 判定结果为 True
    条件6 a == 1 判定结果为 False
    条件7 b == 1 判定结果为 True
    条件8 b == 1 判定结果为 False
  • 路径总数

    总共有 3 条路径

    序号 描述
    路径1 a == 0 && b == 0 判定结果为 True
    路径2 a == 0 && b == 0 判定结果为 False,a == 1 || b == 1 判定结果为 True
    路径3 a == 0 && b == 0 判定结果为 False,a == 1 || b == 1 判定结果为 False

总数都已经统计好了,下边通过两张图例(也是两种情况)来说明,如果计算各个覆盖率。

  1. 入参为 aa = 0、bb = 0

    (这里需要纠正一下图中一个错误:路径覆盖率应该是1/3,而不是1/8)
  2. 入参为 aa = 1、bb = 0

    (这里需要纠正一下图中一个错误:路径覆盖率应该是1/3,而不是1/8)

如何计算单元测试的覆盖率相关推荐

  1. Golang单元测试与覆盖率

    1 概述 C/C++和Java(以及大多数的主流编程语言)都有自己成熟的单元测试框架,前者如Check,后者如JUnit,但这些编程框架本质上仍是第三方产品,为了执行单元测试,我们不得不从头开始搭建测 ...

  2. vue/cli4 单元测试与覆盖率体系搭建

    探索 vue-cli4 创建集成 mocha + chai 的项目中,如何写单元测试和查看单元测试覆盖率. 1.建立一个集成单元测试的项目 首先创建一个新的项目 vue-cli4-unit-mocha ...

  3. java代码实现单元测试jacoco覆盖率收集生成多模块聚合报告

    文章目录 背景 一.准备工作 - 生成exec文件 二.准备工作 - 引入依赖 三.利用jenkins-jacoco插件源码收集覆盖率结果 四.生成jacoco报告文件,聚合多模块 附赠相关知识点 背 ...

  4. java junit 覆盖率,java单元测试篇:使用clover为junit单元测试做覆盖率分析(三)...

    三.修改build.xml文件添加clover任务?7L;x9NYPJm_0 5X7rDp{X2H,J"V0现在我们开始修改build.xml文件,添加clover任务,以实现junit测试 ...

  5. java junit 覆盖率_java单元测试篇:使用clover为junit单元测试做覆盖率分析(二)...

    51Testing软件测试网 Ri;yBnkQ!z^ 之后,我们创建一个junit测试代码MoneyTest.java,来测试Money.java和MoneyBag.java类,这里我也把它放在src ...

  6. 如何使用OpenCppCoverage检查单元测试的行覆盖率

    OpenCppCoverage是在Windows检查单元测试行覆盖率的一个工具.官网在OpenCppCoverage (github.com) 首先需要安装对应的可执行文件,点击链接Releases ...

  7. 在idea中使用JaCoCo插件统计单元测试覆盖率

    在后台工程师开发完新代码交给QA进行测试时,软件测试人员一般都会要求后台开发对单元测试的覆盖率达到一定的标准:例如我们的标准是分支覆盖率达到50%以上,函数覆盖率达到50%以上. 在idea中查看覆盖 ...

  8. Jenkins 进阶篇 - 单元测试覆盖率

    我们做项目开发,肯定免不了要写单元测试,不管是 Java 项目.Python 项目.PHP 项目,甚至是 nodejs 项目,都应该要写单元测试,本小节就来介绍单元测试的覆盖率报告输出和展示,在后面的 ...

  9. Junit内部解密之四: Junit单元测试最佳实践

    我们做使用Junit工具来做单页测试或接口测试时,需要注意一些问题,包括我们的编码规范,test规范,以及编写测试代码的策略,以下个人的总结. 1.为还没有实现的测试代码抛出一个异常.这就避免了该测试 ...

最新文章

  1. mysql中在表中insert数据时,有重复主键id时,变成update
  2. 人工智能从业者应该从哪里去寻找和阅读顶级论文?
  3. Asp.net Core认证和授权:JWT认证和授权
  4. 删除文件提示“您需要权限才能执行此操作”如何解决
  5. 课堂练习--最大子数组和 环
  6. python动态执行语句_Python Language
  7. 求1+2+…+n变态问题的两个很棒的解法
  8. Windows服务中Timer组件Tick无法触发
  9. C# 电子发票生成pdf
  10. python检测刀具_科研一角|Python语言在人工智能加工中心机器人方面的应用
  11. 逻辑斯谛回归模型处理Kaggle泰坦尼克号之灾
  12. 关于投票活动主办方对于微信上投票怎样刷票及微信投票怎样查刷票
  13. Spring单例模式的一次失败经历和总结
  14. 微信小程序导入Bmob后端云的步骤
  15. 《中国管理信息化》期刊简介及投稿要求
  16. 快手公会入驻需要什么条件?
  17. Windows批量修改文件名
  18. HTML网页设计基础笔记 • 【第1章 HTML5基础】
  19. Arduino Mind+编程 轮询读取多个软串口数据的方法讨论
  20. word,excel,ppt突然默认变成了其他应用程序的打开方式,如何调整回来?

热门文章

  1. SEO优化,4个独辟蹊径的策略
  2. 简繁 data_gb.php 下载,简繁转换的程序_php
  3. 多线程异常处理:挖掘页面空窗背后的原因
  4. JVM是怎么和操作系统交互的?
  5. CSS-justify-content 属性
  6. JRebel热部署,从此告别一遍一遍重启项目
  7. ubuntu安装与配置,pytorch-gpu+cuda+cudnn+anaconda+pycharm
  8. 毕业设计——>基于SSM的健身房管理系统
  9. 电脑插座,电脑专用插座如何接线?电脑专用插座如何挑选?
  10. 国内主流比价网站测试分析报告