单元测试的一般步骤

news2025/4/22 3:25:21

Qt Test

Qt Test 是 Qt 开发人员发布的一个单元测试框架,用于测试基于 Qt 框架的应用程序或库。它提供了单元测试框架中常见的所有功能以及用于测试图形用户界面的扩展。

1.自动化测试包络ui测试>接口测试>单元测试;现问如何使用Qt进行单元测试?

==》通过Qt的 Qt Test 模块来编写测试用例。

2.我们想测试,qos/qosbrowser/src/helper/filehelper.cpp中的readAllTxt和joinPath方法;该怎么进行?

QString FileHelper::readAllTxt(const QString &filePath)
{
    QFile file(filePath);
    if (file.exists() && file.open(QIODevice::ReadOnly))
    {
        QByteArray data = file.readAll();
        file.close();
        return data;
    }
    throw "读取文件失败";
}
​
​
QString FileHelper::joinPath(const QString &path1, const QString &path2)
{
    QString path = path1 + "/" + path2;
    QStringList pathList = path.split(QRegExp("[/\\\\]"), Qt::SkipEmptyParts);
    path = pathList.join("/");
    return QDir::cleanPath(path);
}

==>下面的实现可解决。

注:当我们要测试某个类时,就创建一个对应的工程;

实现

创建子项目

新建一个test项目的子项目:取名testFileHelper

这个单元测试的项目针对的是 FileHelper的测试;

创建完项目之后,结果如下:

编写测试用例

接着我们就在tst_testfilehelper.cpp中大作文章,做法如下:

1我们通过定义信号槽来运行测试用例;且这些槽函数都是test_,表示运行测试用例的标志。下面我们定义两个测试用例:

void test_readAllTxt();

void test_joinPath();

2.下面这两个函数表示在运行测试用例之前进行的初始化的操作和之后的清理动作

void test_readAllTxt();

void test_joinPath();
即我们定义的方法如下:
class TestFileHelper : public QObject
{
    Q_OBJECT
​
public:
    TestFileHelper();
    ~TestFileHelper();
​
private slots:
    void initTestCase();
    void cleanupTestCase();
    void test_readAllTxt();  // 1个测试用例
    void test_joinPath();
};

接着我们来实现测试用例的逻辑:

//测试用例会检查
 FileHelper::readAllTxt(":/testfile.txt") 的返回值是否等于 "abc"
void TestFileHelper::test_readAllTxt()
{
    QCOMPARE(FileHelper::readAllTxt(":/testfile.txt"), "abc");
}
​
//检查 FileHelper::joinPath("C:\\a\\b", "c") 是否能够正确地将路径拼接成 "C:/a/b/c"
void TestFileHelper::test_joinPath()
{
    QCOMPARE(FileHelper::joinPath("C:\\a\\b", "c"), "C:/a/b/c");
}

关于上面的代码使用了 QCOMPARE宏;它是 Qt 测试框架提供的宏,功能是比较两个对象

的值,如果它们不相等,测试会失败。

在其中我们还要引入 FileHelper 类的头文件,即被测的类的头文件。

pro文件中引入qosbrowser

接着在其pro文件中写入以下信息:

从而 将 qosbrowser 目录添加到头文件的搜索路径中,以便能够包含所需的头文件。

INCLUDEPATH += $$PWD/../../qosbrowser

引入测试对象的cpp和头文件

然后我们需要将FileHelper 类的cpp和头文件都复制进来:

引入资源文件

因为我们被测类的方法需要引入资源文件testfile.txt,(其中输入abc),故我们需要将其引入。

运行

在下面控制台有一个测试结果界面,我们可以点击其中的三角按钮运行所有的测试用例,可以看到,我两个测试用例中:

void test_readAllTxt();测试通过

void test_joinPath();测试不通过

当然也可以右键函数单独测试某个测试用例。

从这里我们也能够去很清楚的了解到测试的流程;

总结

  1. 初始化阶段 (initTestCase)

    • 在运行任何测试用例之前,initTestCase() 会被调用,通常用来做一些准备工作,比如文件的创建、连接到数据库等操作。

  2. 执行测试用例

    • test_readAllTxt()test_joinPath() 会执行具体的功能测试,通过 QCOMPARE 来验证实际返回值与预期值是否一致。

  3. 清理阶段 (cleanupTestCase)

    • 测试用例执行完后,cleanupTestCase() 会被调用,清理测试过程中可能创建的资源,确保下一个测试用例不会受上一个测试用例的影响。

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

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

相关文章

UE5 渲染视频

文章目录 概述插件开始渲染渲染透明背景的视频 概述 渲染视频需要使用关卡序列 渲染原理就是将一个关卡序列渲染为序列帧 序列帧放到AE里会自动变成视频 UE版本是5.4.4 插件 首先开启新的渲染插件,否则会自动使用旧的渲染插件 插件里搜Render,开启这…

pycharm无法识别到本地python的conda环境解决方法

问题一 现象描述: 本地已经安装了conda,但在pycharm中选择conda环境却识别不到, 解决方法:手动输入conda path,点击R eload environments基本就能修复,比如我的路径如下 /Users/test/conda/miniconda3/b…

LFM调制信号分类与检测识别

LFM调制信号分类与检测识别 LFM调制信号分类识别AlexNet网络识别InceptionV3、ResNet-18、ResNet-50网络识别 LFM调制信号检测识别 LFM调制信号分类识别 支持识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、阻塞干扰(BJ)、密集假目标干扰(…

头歌实训之连接查询

🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C语言的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…

常见的服务器硬盘接口

常见的服务器硬盘接口有SATA、SAS、M.2、U.2 一、SATA接口 SATA(Serial Advanced Technology Attachment)是广泛应用于存储设备的串行接口标准,在服务器中主要用于连接大容量机械硬盘(HDD)或经济型固态硬盘&#xff…

SpringBoot编写单元测试

pom.xml引入单元测试的坐标 <!--单元测试坐标--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>编写单元测试类 测试类…

目标分割模型优化自身参数都是梯度下降算法吗?

在计算机视觉的深度学习任务中&#xff0c;诸如 CNN、FCN、U-Net、DeepLab 系列模型已成为图像分类与图像分割任务的核心架构。它们在网络结构和任务上有所差异&#xff0c;但是否共享同一种优化机制&#xff1f;是否都使用梯度下降&#xff1f;优化过程中又有什么本质区别&…

基于springboot的商城

1 项目使用技术 后端框架&#xff1a;SpringBoot 数据库&#xff1a;MySQL 开发工具&#xff1a;IDEA 2 项目功能模块 商城功能包含前台和后台。 &#xff08;1&#xff09;前台主要包含&#xff1a;用户注册登录模块、首页模块、搜索模块、商品详情、购物车、提交订单、…

MATLAB 控制系统设计与仿真 - 37

范数鲁棒控制器的设计 鲁棒控制器的设计 根据双端子状态方程对象模型结构&#xff0c;控制器设计的目标是找到一个控制器K(s),它能保证闭环系统的范数限制在一个给定的小整数下&#xff0c;即 这时控制器的状态方程为&#xff1a; 其中X与Y分别为下面两个代数Riccati方程的解…

英码科技与泊川软件,携手加速AI与嵌入式系统融合创新

2025年4月15日&#xff0c;广州英码信息科技有限公司&#xff08;以下简称“英码科技”&#xff09;与广州泊川软件技术有限公司&#xff08;以下简称“泊川软件”&#xff09; 正式签署战略合作框架协议。此次合作将充分发挥双方在AI计算硬件与嵌入式操作系统领域的技术优势&a…

电脑 访问 github提示 找不到网页,处理方案

1、找到 本机的 host文件 例如 windows 的 一般在 C:\Windows\System32\drivers\etc\hosts 用管理员身份打开 hosts 文件 如果文件中没有 github的配置&#xff0c;需要自己手动添加上去&#xff1b; 如果有&#xff0c;则需要 检查 github.com 与 github.global.ssl.fastly.…

Linux学习——了解和熟悉Linux系统的远程终端登录

Linux学习——了解和熟悉Linux系统的远程终端登录 一.配置Ubuntu系统的网络和用户 1、设置虚拟机网络为桥接模式 打开VMWare&#xff0c;选择编辑虚拟机设置&#xff0c;在网络适配器设置中&#xff0c;选择“桥接模式”&#xff0c;保存设置并启动Ubuntu。 2、配置Ubuntu的…

AI 中的 CoT 是什么?一文详解思维链

文章目录 CoT 的组成CoT 的作用CoT 的推理结构变体CoT 的特点CoT 的适用场景总结 在人工智能领域&#xff0c;尤其是自然语言处理和机器学习中&#xff0c;有一种名为思维链&#xff08;Chain of Thought&#xff0c;CoT&#xff09;的技术&#xff0c;它正逐渐改变着我们对 AI…

【OC】AVPlayerLayer的学习

文章目录 前言关于AVPlayer概念及作用具体方法及使用 关于AVPlayerLayer基本概念及作用具体用法 AVPlayer与AVPlayerLayer结合实现视频播放应用使用本地视频使用网络请求申请视频数据 总结 前言 在编写类视频软件项目时&#xff0c;涉及到视频播放的问题&#xff0c;我们需要给…

C++笔记-list

list即是我们之前学的链表&#xff0c;这篇主要还是讲解list的底层实现&#xff0c;前面会讲一些list区别于前面string和vector的一些接口以及它们的注意事项。 一.list的基本使用 和之前的string&#xff0c;vector一样&#xff0c;有很多之前见过的一些接口&#xff0c;经过…

open webui 介绍 是一个可扩展、功能丰富且用户友好的本地部署 AI 平台,支持完全离线运行。

AI MCP 系列 AgentGPT-01-入门介绍 Browser-use 是连接你的AI代理与浏览器的最简单方式 AI MCP(大模型上下文)-01-入门介绍 AI MCP(大模型上下文)-02-awesome-mcp-servers 精选的 MCP 服务器 AI MCP(大模型上下文)-03-open webui 介绍 是一个可扩展、功能丰富且用户友好的…

极狐GitLab 登录限制如何设置?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 登录限制 (BASIC SELF) 您可以使用登录限制自定义 Web 界面以及基于 HTTP(S) 的 Git 的身份验证限制。 设置 要访问登录限…

嵌入式exfat-nofuse文件系统移植和使用

exfat-nofuse 是一款专为linux ARM平台设计的开源项目,它提供了一个非FUSE机制的内核级驱动,用于在Linux系统上无缝地读写exFAT和VFAT文件系统。此项目由Dorimanx维护,采用C语言编写&#xff0c;兼容GPL-2.0许可证。它避开了FUSE&#xff08;用户空间文件系统&#xff09;的使用…

再来一篇,Linux中的软件管理

Linux中软件包的类型 在Linux系统中&#xff0c;软件包有多种不同的格式和类型&#xff0c;主要包括以下几种&#xff1a; DEB (Debian软件包)&#xff08;此软件包不适用于RHEL8 系统&#xff09;&#xff1a; 适用于 Debian 及其衍生版本&#xff08;如Ubuntu等&…

SimBody安装

SimBody安装 Simbody 是一个用于创建生物力学和机械系统仿真的多体动力学库。 SimBody安装 Windows安装&#xff1a; 下载地址&#xff1a;GitHub - simbody/simbody: High-performance C multibody dynamics/physics library for simulating articulated biomechanical and…