Qt代码单元测试以及报告生成

news2024/11/17 11:54:26

简介

单元测试是所有测试中最底层的一类测试,是第一个环节,也是最重要的一个环节,是唯一一次有保证能够代码覆盖率达到100%的测试,是整个软件测试过程的基础和前提,单元测试防止了开发的后期因bug过多而失控,单元测试的性价比是最好的。
覆盖率(code coverage rate)是反映测试用例对被测软件覆盖程度的重要指标,也是衡量测试工作进展情况的重要指标。在代码逻辑比较复杂的情况下,测试工作往往只能覆盖到显而易见的逻辑分支,而更多的深层次的逻辑分支则不容易被测试人员发现。为了保证测试的覆盖率,有些开发人员会尝试协助测试人员写出所有的测试用例,这不仅会牺牲大量的宝贵的开发时间,同时也拥有一定的难度,最重要原因就是因为测试难以量化。而代码覆盖工具就是用来量化代码测试的覆盖率,让测试人员可以直观的发现那些没有覆盖到的代码分支。

先介绍Qt代码做单元测试和生成报告的途径有哪些,后面会详细介绍具体怎么操作

一、单元测试以及生成报告途径

1、单元测试的主要途径:

  • 使用Visual Studio下的OpenCppCoverage工具
  • 在Qt下直接使用gtest和qtest配合一起做

2、生成报告的途径,主要有:OpenCppCoverage、gcovr、lcov。

推荐使用:在 Linux下通过Qt使用gtest和qtest,然后通过lcov导出生成报告。 下面介绍原因。

二、详细介绍

1、VS中使用OpenCppCoverage测试以及生成报告方式(生成报告速度较慢)

在这里插入图片描述
在这里插入图片描述
对于界面来说,需要点击才能产生覆盖率,这个不是特别友好

2、在Linux环境下通过Qt使用gtest和qtest测试,然后通过lcov导出生成报告

  1. 环境的准备
    > 其中gtest需要下载,下载后修改成子工程模式加到工程中就可以了,gtest下载地址: https://github.com/google/googletest
    可以修改Pro文件为子工程文件,具体忘记修改了哪些内容,自己研究一下吧。抱歉╮(╯▽╰)╭
    > lcov在Linux下通过apt-get命令下载安装就可以
  2. pro文件的修改
include(../test/test.pri)   							    # 测试子工程
include(../gtest/googletest/gtest_dependency.pri)			# gtest 子工程

QMAKE_LFLAGS +=-fprofile-arcs -ftest-coverage
QMAKE_CXXFLAGS += --coverage								# 申明为要做单元测试
LIBS += -lgcov								                # 引入库文件
  1. main中的修改
// 依赖的头文件
#include <gtest/gtest.h>
#include <gmock/gmock.h>

::testing::InitGoogleTest(&argc, argv); 		// 在mian函数中 初始化测试环境

return RUN_ALL_TESTS();						// 运行所有测试单元
  1. 单元测试的编写,以一个测试用例为例(具体可以网上查询)
TEST(test_case_name, test_name)
{
    std::unique_ptr<***> p = std::make_unique<***>();
}
  • test_case_name第一个参数是测试用例名,通常是取测试函数名或者测试类名
  • test_name 第二个参数是测试名这个随便取,但最好取有意义的名称
  • 当测试完成后显示的测试结果将以"测试用例名.测试名"的形式给出
  • 私有函数测试小技巧:可以通过友元类来完成测试

Qt下查看测试情况:
在这里插入图片描述

  1. 生成测试报告(在有.gcno和.gcda文件的文件夹下通过终端执行以下命令:)
命令意义
ENABLE BRANCH="–rc lcov branch coverage=1打开分支覆盖率显示
lcov -d .-c -o r.info $(ENABLE BRANCH} 1>/dev/null1>/dev/null也可以去掉,它的作用是不输出信息到终端
genhtml --branch-coverage -o result $ENABLE BRANCHI rinfo生成全部覆盖率信息 r.info 总的覆盖率信息,并生成到result 文件夹中
lcov --extract rinfo '* /path/*i -o resultinfo抽取想要的覆盖率信息,eg:抽取path下的覆盖率信息 ,具体可以通过result文件夹下indes.html 中查看要抽取部分,可以多个
genhtml result.info -o output/重新生成报告,并导出到 output文件夹中
  1. 最终报告

3、在Windows环境下通过Qt使用gtest和qtest测试,然后通过gcovr导出生成报告

除了导出报告方法和Linux不一样外,其他步骤和Linux一样
生成报告命令**(coverage.html报告名,可修改)**:

gcovr -r . --html --html-details -o coverage.html

但是有个问题,只能生成ui_.h和moc_.cpp的报告,具体怎么生成源码测试报告的方案没研究明白
有研究明白的或者知道怎么生成的,希望留言指教,谢谢
**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

< elementUi 组件插件: el-table表格拖拽修改列宽及行高 及 使用注意事项 >

elementUi 组件插件&#xff1a; el-table拖拽修改列宽及行高 及 使用注意事项&#x1f449; 资源Js包下载及说明&#x1f449; 使用教程> 实现原理> 局部引入> 全局引入 &#xff08;在main.js中&#xff09;&#x1f449; 注意事项往期内容 &#x1f4a8;&#x1f4…

Android Studio adb命令

Android Studio在IP连接142的手机进行无线调试 adb tcpip 5555 // 端口 adb shell ifconfig wlan0 //查看ip adb connect 192.168.1.142:5555 当已经连接上142这个ip&#xff0c;还想再连接其他143这个ip 方法如下&#xff1a; adb devices -l 查看当前设备 adb …

直接下载docker镜像包

这周正在做APIcat的企业版研发&#xff0c;准备适配阿里云的计算巢提供企业直接云安装的功能&#xff0c;顺便把原来写过的一个直接下载docker镜像包的小程序挂到了Gitee上面&#xff0c;有需要的可以点击下载 https://gitee.com/extrame/dgethttps://gitee.com/extrame/dget …

安灯呼叫系统助力企业实现精益管理

在当前的生产企业管理过程当中&#xff0c;生产现场难免会出现各种异常情况影响生产&#xff0c;乳设备需要机修、品质问题、物料呼叫等各种情况&#xff0c;在以往这些问题出现过后处理的方式都是些申请单&#xff0c;由人工到各个部门去给领导签字&#xff0c;浪费大量时间沟…

【Unity VR开发】结合VRTK4.0:远距离抓取物体

语录&#xff1a; 我们都生活在阴沟里&#xff0c;但仍有人仰望星空。 前言&#xff1a; 空间场景中的一个常见问题是试图抓取一个无法触及或太远而无法到达的对象。VRTK提供了一种简单的方法来实现这种技术&#xff08;Interactions.PointerInteractors.DistanceGrabber&…

上市公司每股社会贡献值(数据+代码)(2000-2020年)

数据来源&#xff1a;自我整理 时间跨度&#xff1a;2000-2020年 区域范围&#xff1a;上市公司 指标说明&#xff1a; 每股社会贡献值( 净利润所得税费用营业税金及附加支付给职工以及为职工支付的现金本期应付职工薪酬-上期应付职工薪酬财务费用捐赠-排污费及清理费) / 期…

MySQL服务器体系架构 执行原理

前言 前边我们了解了MySQL采用客户端/服务器架构&#xff0c;用户通过客户端程序发送增删改查需求&#xff0c;服务器程序收到请求后处理&#xff0c;并且把处理结果返回给客户端。这篇文章主要看下MySQL服务端是如何处理客户端的请求&#xff0c;感兴趣的小伙伴们可以参考借鉴…

【单目标优化算法】烟花优化算法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

定时器设计

定时器设计 定时器应用&#xff1a; 游戏的Buff实现&#xff0c;Redis中的过期任务&#xff0c;Linux中的定时任务等等心跳检测&#xff0c;如服务器接收队列满了&#xff0c;tcp客户端会定时探测是否能够发送数据 定时器数据结构选取要求&#xff1a; 需要快速找到到期任务…

防火墙设置实验(12)

预备知识防火墙基本原理 防火墙是一种访问控制技术&#xff0c;位于可信与不可信网络之间&#xff0c;通过设置一系列安全规则对两个网络之间的通信进行控制&#xff0c;检测交换的信息&#xff0c;防止对信息资源的非法存取和访问。防火墙分为软防火墙和硬防火墙&#xff0c;一…

关于分布式的一些基础知识

1、分布式锁 (ngix,zoomkeeper,raft,kafka) 在单机场景下&#xff0c;可以使用语言的内置锁来实现进程或者线程同步。但是在分布式场景下&#xff0c;需要同步的进程可能位于不同的节点上&#xff0c;那么就需要使用分布式锁。 为了保证一个方法或属性在高并发情况下的同一时间…

【面试题】前端春招第二面

不容错过的一些面试题小细节&#xff0c;话不多说&#xff0c;直接看题~大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库HTML/CSS/Javascript/ES篇&#xff08;1&#xff09;标准盒模型和怪异盒…

k8s集群概念组件简介

一、Kubernetes 集群概述1.2 Kubernetes 资源资源用途服务&#xff08;Service&#xff09;Kubernetes 使用服务在一组 pod 上公开正在运行的应用程序。ReplicaSetKubernetes 使用 ReplicaSet 来维护恒定的 pod 号。Deployment维护应用程序生命周期的资源对象。1.3 Kubernetes …

重生之我是赏金猎人-SRC漏洞挖掘(七)-看我如何从FUZZ到SRC官网XSS

0x01 前奏 本文来自&#xff1a;RGM78sec 截至发稿&#xff0c;vuln早已修复 前不久在挖掘某SRC时&#xff0c;偶然在该SRC官网的编辑器发现了一个接口。 起初以为是任意文件包含能RCE了&#xff0c;后来测试发现只是拼接读取了远程资源站的图片&#xff0c;原本都想着放弃…

TypeScript(二)基本数据类型

前言 距离上篇博客已有两年了&#xff0c;对TS也有了一定的认识&#xff0c;于是计划继续更新系列文章 基本数据类型 在JS中&#xff0c;基本数据类型有&#xff1a;Boolan&#xff08;布尔&#xff09;&#xff0c;Number&#xff08;数字&#xff09;&#xff0c;String&a…

什么是事务?Mysql事务怎么用?Mybatis怎么操作事务的?Spring呢?快进来看看

目录 一、计算机中的事务 1. 概念 2.事务的ACID特性 3.事务类型 1)手动事务 2)自动事务 4.为什么需要事务? 5.优点 二、MySQL事务 1.语法格式: 2.关闭自动提交&#xff0c;开启新事务 3.开启自动提交&#xff0c;关闭事务控制 三、Mybatis事务 Mybatis开关事务控…

Meta AR眼镜主管:正开发史无前例的AR,但要解决很多困难

前不久&#xff0c;Meta CTO Andrew Bosworth在个人博客上“怒斥”公司内部不够专注&#xff0c;应该将资源投入在有核心竞争力、高投资回报率的业务上&#xff0c;而不是开发取悦用户却不赚钱的产品。尽管删除一些小众功能后&#xff0c;用户可能会不满&#xff0c;但为了让Me…

Bi系统跟数据中台的区别是什么?

随着数据时代的发展&#xff0c;BI分析是当今数据时代必不可少的能力之一。BI系统通过系统化产品化的方法&#xff0c;能够大幅降低数据的获取成本、提升数据使用效率。同时借助可视化、交互式的操作&#xff0c;可以高效支持业务的分析及发展。 BI如此火热&#xff0c;随之而…

openpnp - 增加散料飞达

文章目录openpnp - 增加散料飞达概述笔记飞达在设备上的放置方向编带料在飞达中的方向将相机移动到飞达料的第一孔的中心捕获保存第1孔中心编带设置测试相机位置是否正确测试吸嘴的位置是否正确将吸嘴回到安全位置测试是否能正确抓料ENDopenpnp - 增加散料飞达 概述 使用open…

MySQL性能调优与设计——MySQL调优——慢查询

MySQL调优–慢查询 MySQL调优金字塔 很明显从图上可以看出&#xff0c;越往上走&#xff0c;难度越来越高&#xff0c;收益却越来越小。 对于架构调优&#xff0c;在系统设计时首先需要充分考虑业务的实际情况&#xff0c;是否可以把不适合数据库做的事情放到数据仓库、搜索引…