如何计算单元测试的覆盖率

这篇具有很好参考价值的文章主要介绍了如何计算单元测试的覆盖率。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概念

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

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

  • 分支覆盖率
    有判定语句的地方都会出现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; // 语句1
        int b = bb; // 语句2
        
        if (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

总数都已经统计好了,下边通过两张图例(也是两种情况)来说明,如果计算各个覆盖率。文章来源地址https://www.toymoban.com/news/detail-811859.html

  1. 入参为 aa = 0、bb = 0
    单元测试覆盖率true hits1 false hits1,单元测试,单元测试,java,开发语言
    (这里需要纠正一下图中一个错误:路径覆盖率应该是1/3,而不是1/8)
  2. 入参为 aa = 1、bb = 0
    单元测试覆盖率true hits1 false hits1,单元测试,单元测试,java,开发语言
    (这里需要纠正一下图中一个错误:路径覆盖率应该是1/3,而不是1/8)

到了这里,关于如何计算单元测试的覆盖率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Sonarqube-8.9版本测试单元测试覆盖率

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

    2024年02月02日
    浏览(42)
  • Lombok导致代码单元测试覆盖率崩塌

    Lombok 由于其使用的便利性, 目前流传非常广泛。甚至有呼声希望其能被Java官方引入,成为JDK的一部分。 当然凡事都有两面性,Lombok的引入也是有代价的。一时注释一时爽,结果导致代码在不知不觉中翻了好几倍。 例如以下几个简单的注解,背后是N多个自动生成的方法: @Da

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

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

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

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

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

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

    2024年02月11日
    浏览(24)
  • Springboot 多模块项目集成Jacoco统计单元测试覆盖率

    jenkis服务器需要配置Jacoco 常见报错: Not compiling test sources Skipping JaCoCo execution due to missing execution data file. 修改插件配置

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

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

    2024年02月04日
    浏览(49)
  • java & jacoco & powerMock 单元测试覆盖率为0怎么解决

    我们项目中使用powerMock作为单元测试的mock工具,统计项目测试覆盖率使用jacoco编译的结果上传到sonar,但是jacoco 和 powerMock在运行时runtime加载代码的时候自定义了类加载器,所以就会有冲突,导致测试覆盖率为0。 使用命令 mvn clean verify sonar:sonar上传jacoco编译结果(这里sonar命令

    2023年04月08日
    浏览(32)
  • 查看单元测试用例覆盖率新姿势:IDEA 集成 JaCoCo

    关于测试左移之JaCoCo,代码覆盖率统计 什么是jacoco? jacoco是一个开源的代码覆盖率工具,针对java语言,其使用方法很灵活,可以嵌入到Ant、Maven中;可以作为Eclipse插件,可以使用其JavaAgent技术监控Java程序等等。代码覆盖率一般又分为单元测试覆盖率和功能测试覆盖率,对于

    2024年01月19日
    浏览(29)
  • 单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

    在前几章我们深度讲解了单元测试和集成测试的基础知识,这一章我们来讲解一下 代码覆盖率 ,代码覆盖率是单元测试运行的 度量值 ,覆盖率通常以百分比表示,用于衡量代码被测试覆盖的程度,帮助开发人员评估测试用例的质量和代码的健壮性。常见的覆盖率包括语句覆盖

    2024年04月23日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包