单元测试——测试代码功能及代码覆盖率

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

目录

目录

前言

一、单元测试是什么?

二、前置准备

 三、测试代码

 四、示例

 五:单元测试覆盖率


前言

单元测试的写法不固定,这里以我自己的一种写法为例,算是很简单的一种写法

  文章来源地址https://www.toymoban.com/news/detail-471827.html

一、单元测试是什么?

        单元测试其实就是写一些测试函数,测试代码的功能是否正常运行,一般如果还有覆盖率要求的话,则需要通过自己写的测试函数去走过每一个函数的每一个分支。

        覆盖率则是会通过检测你所写的测试代码,在全部源代码中走过的分支所占比例来定的。

二、前置准备

        在写单元测试之前,首先是要安装好环境,这里就不做环境安装说明了。

        首先要在代码中加上几个文件。

                a,首先要知道,在写单元测试时,只需要将所有.c和.h文件打包到一起就行,比如,我将所有.c放到src中,.h放在inc中,然后再src和inc放在一个路径下打开

                b, 然后在src(.c问价路径下)中加上main.c和testUnit.c(单元测试文件,名字可自定)两个文件,如下图:单元测试——测试代码功能及代码覆盖率

                main.c:

                        单元测试——测试代码功能及代码覆盖率

        main.c内容随便写,可以自己加上打印提示,但一定要调用单元测试函数。

                testUnit.c

                单元测试——测试代码功能及代码覆盖率

         testUnit.c的内容如图,可以直接照用,唯一需要修改的是 增加组件 部分,这里是根据代码的文件来定的,例如:我的.c文件中有ip,tcp,udp等文件,则需要在每个.c文件中加上测试代码,然后将这个.c中的测试代码在此处(增加组件)调用(函数名自定)。

        CU_initialize_registry( )该函数成功返回枚举成员CUE_SUCCESS。(该枚举定于头文件<CUError.h>中),如果初始化函数执行失败,那么main函数可以返回宏定义CU_get_error()标识出错。

         c,还要在inc(.h文件路径下)加上testUnit.h,主要加上单元测试的一些固定头文件。

                testUnit.h

                        单元测试——测试代码功能及代码覆盖率        

 三、测试代码

        完成前面的准备后,就可以在每一个.c文件中开始写测试代码了,流程步骤如下图:

单元测试——测试代码功能及代码覆盖率

首先,最下方的函数,就是要在testUnit.c中增加组件处调用的函数,每个.c一个。

然后针对.c中不同的函数写不同的测试,比如图中tcptest1,tcptest2,tcptest3等等(函数名自定),无论写多少都可以,只需要在下方if语句中引用即可,注意最后一个后面不加 ||。

 四、示例

        在写单元测试之前首先要知道关于单元测试专用的一些断言。如下图,一般来说用CU_ASSERT_EQUAL一个基本就可以全部解决。

     单元测试——测试代码功能及代码覆盖率

单元测试——测试代码功能及代码覆盖率

当使用这些断言,满足一个断言情况下,最终的报告就会增加一个断言数,例如:

单元测试——测试代码功能及代码覆盖率 使用CU_ASSERT_EQUAL,在上表可知是断言两个值是否相等。

具体示例代码如下:

        假如tcp函数如下,则需要测试每一个分支最终返回结果是否正确已经是否能走到每个分支,则只需要分别满足分支前置条件,然后利用断言查看返回是否正确,也可以利用打印看看返回是多少来确定断言正确。

单元测试——测试代码功能及代码覆盖率

 

 五:单元测试覆盖率

单元测试——测试代码功能及代码覆盖率

当写完单元测试编译运行后,就会在终端出现上图打印,最左边三个分别表示写了测试函数的.c 文件数、测试函数总数、断言总数。

当完成这一步如果还有覆盖率要求,则使用如下指令:

            1, 编译:gcc -fprofile-arcs -ftest-coverage  -dumpbase '' -o main test.c func.c

                 参数:

                        -fprofile-arcs:使gcc创建一个程序的流图,执行生成.gcda文件

                        -ftest-coverage:编译生成.gcno文件,用于查代码覆盖率

                        -dumpbase '' 设置前缀名称

                ps:也可直接在makefile中加上 -fprofile-arcs -ftest-coverage  -dumpbase ''
            2, ./main   执行生成的执行文件
            3, lcov --directory . --capture --output-file app.info
           4, genhtml -o results app.info (会在路径下生成一个results文件夹,里面的内容就是覆盖率报告,html文件)

 

 

 

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

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

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

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月09日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包