CPPTest设计分析

目录

  • 1 概述
  • 2 设计
  • 3 扩展Output
  • 3.1 扩展实例

1 概述

  CppTest是一个可移植、功能强大但简单的单元测试框架,用于处理C++中的自动化测试。重点在于可用性和可扩展性。支持多种输出格式,并且可以轻松添加新的输出格式。

CppTest下载地址Sourceforge Github地址
下面对其设计进行分析,以更好对其使用。

2 设计

其类图如下:
类图
说明:

  • 从类图看其类型主要是Suite类型和Output类型
  • Suite其析构函数纯虚函数,明显是用来派生使用的。
    • 保护类型虚函数setup和tear_down是在运行Suite中每个测试函数之前和之后调用的接口,可以重载这两个接口,做测试之前的准备和收尾工作,这两个函数默认什么都不做。
  • Output类型是过程中所有输出类型的基类,其构造函数是保护类型的,不能直接使用,需要派生使用。需要实现接口如下:
    • initialize 初始化接口
    • finished 完成接口
    • suite_start suite开始接口
    • suite_end suite结束接口
    • test_start 测试开接口
    • test_end 测试结束接口
    • assertment 断言接口
  • 从Output派生的类型:
    • CompilerOutput 类似编译器输出类型,支持格式如下:
      • Generic - file:line: text
      • BCC - Error cpptest file line: text
      • GCC - file:line: text
      • MSVC - file(line) : text
    • TextOutput 文本个数输出,支持格数如下:
      • Terse 其仅显示正确测试的数量。
        RingQueueSuite: 2/2, 50% correct in 0.002901 seconds
        Total: 2 tests, 50% correct in 0.002901 seconds
        
      • Verbose 显示正确测试的数量基础上,其还示出了针对每个失败的测试的扩展断言信息。
        RingQueueSuite: 2/2, 50% correct in 0.002377 seconds
        Test:    one_to_multi
        Suite:   RingQueueSuite
        File:    cpp/test/concurrent/concurrent/ring_queue_test.cpp
        Line:    90
        Message: Got 5, expected 6
        
        Total: 2 tests, 50% correct in 0.002377 seconds
        
    • CollectorOutput 收集型输出类型,不同于上面实时输出类型,收集输出类型先收集信息,在整个测试完毕后统一输出。
      • HtmlOutput Html格式输出属于收集型输出

3 扩展Output

如果是实时输出直接从Output派生,如果是收集型输出,需要从CollectorOutput派生。

3.1 扩展实例

cpptest默认输出都是英文信息,假如我们想输出中文信息及报告。我们需要:

  • 派生我们自己Output,在我们自己的Output实现中需要输出时按中文输出即可。
  • 不使用TEST_ASSERT_EQUALS/TEST_ASSERT_EQUALS_OBJ/TEST_ASSERT_EQUALS_MSG/TEST_ASSERT_DELTA,这4个宏中会有英文错误信息。
    #define TEST_ASSERT_EQUALS_MSG(expected, got, msg)						\
        {																	\
            if (!((got) == (expected)))										\
            {																\
                std::stringstream tmpstream;								\
                tmpstream << (msg) << ": ";									\
                tmpstream << "Got " << (got) << ", expected " << (expected);\
                assertment(::Test::Source(__FILE__, __LINE__,				\
                            tmpstream.str().c_str()));						\
                if (!continue_after_failure()) return;						\
            }																\
        }
    
  • 上面4个宏如果需要,可以重新定义,将其中英文信息修改为中文信息。
    #define TEST_ASSERT_EQUALS_MSG(expected, got, msg)						\
        {																	\
            if (!((got) == (expected)))										\
            {																\
                std::stringstream tmpstream;								\
                tmpstream << (msg) << ": ";									\
                tmpstream << "期望 " << (expected) << ", 实际是 " << (got); \
                assertment(::Test::Source(__FILE__, __LINE__,				\
                            tmpstream.str().c_str()));						\
                if (!continue_after_failure()) return;						\
            }																\
        }
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java技术栈总结:数据库MySQL篇

一、慢查询 1、常见情形 聚合查询 多表查询 表数据量过大查询 深度分页查询 2、定位慢查询 方案一、开源工具 调试工具&#xff1a;Arthas运维工具&#xff1a;Prometheus、Skywalking 方案二、MySQL自带慢日志 在MySQL配置文件 /etc/my.conf 中配置&#xff1a; # …

云原生技术峰会:引领智能算力时代的创新浪潮

云原生技术峰会&#xff1a;引领智能算力时代的创新浪潮 随着云计算技术的飞速发展和智能算力的不断提升&#xff0c;云原生架构已成为推动企业数字化转型的重要力量。一场汇聚了业界顶尖专家和学者的云原生技术峰会成功举行&#xff0c;与会者共同探讨了云原生在智能算力时代…

python3用两个栈实现一个队列

栈与队列 栈&#xff1a;先入后出&#xff0c;First In First Out (FIFO) &#xff0c;类似桶&#xff08;入到桶底、取从桶顶&#xff09; 队列&#xff1a;先入先出&#xff0c;First In Last Out (FILO) 用两个栈实现一个队列 两个桶&#xff08;栈&#xff09;&#x…

Shell 编程入门

优质博文&#xff1a;IT-BLOG-CN 【1】x.sh文件内容编写&#xff1a; 固定开头&#xff1a;#&#xff01;/bin/sh&#xff1b; 【2】学习的第一个命令就是echo输出的意思&#xff1b; 【3】其实shell脚本也就是在文件中写命令&#xff0c;但是我们要写的是绝对路径&#xff1a…

Web渗透:逻辑越权漏洞

逻辑越权漏洞&#xff08;Business Logic Vulnerability&#xff09;是指攻击者利用应用程序业务逻辑中的漏洞&#xff0c;绕过正常的安全控制&#xff0c;执行未授权的操作。与常见的技术性漏洞不同&#xff0c;逻辑越权漏洞通常与应用程序的功能和流程有关&#xff0c;需要对…

Java初识集合(后续不断补充)

第一次更新时间&#xff1a;2024.6.26 集合概述 Java中的集合就像一个容器&#xff0c;专门用来存储Java对象&#xff08;实际上是对象的引用&#xff0c;但习惯称为对象&#xff09;&#xff0c;这些对象可以是任意的数据类型&#xff0c;并且长度可变。其中&#xff0c;这些…

使用go语言来完成复杂excel表的导出导入

使用go语言来完成复杂excel表的导出导入&#xff08;一&#xff09; 1.复杂表的导入 开发需求是需要在功能页面上开发一个excel文件的导入导出功能&#xff0c;这里的复杂指定是表内数据夹杂着一对多&#xff0c;多对一的形式&#xff0c;如下图所示。数据杂乱而且对应不统一。…

基于单片机和 Arduino 平台的六自由度可控机械手臂

摘 要 : 为了降低机械手臂的设计开发难度 &#xff0c; 并使之尽早地投入应用 &#xff0c; 设计一种基于单片机和 Arduino 平台的六自由度可控机械手臂 。提出六自由度可控机械手臂的控制方案&#xff0c; 给出机械手臂控制系统的结构框图 。 详细设计六自由度可控机械手臂…

1991java Web体检预约管理系统eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP体检预约管理系统是一套完善的web设计系统&#xff0c;对理解JSP java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0&#xff0c;使用…

2024华为数通HCIP-datacom最新题库(变题更新⑤)

请注意&#xff0c;华为HCIP-Datacom考试831已变题 请注意&#xff0c;华为HCIP-Datacom考试831已变题 请注意&#xff0c;华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了&#xff0c;如果你准备去考试&#xff0c;还是用的之前的题库&#xff0c;切记暂缓。 1、…

MATLAB-遗传GA-CNN-SVM,基于GA遗传优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

MATLAB-遗传GA-CNN-SVM&#xff0c;基于GA遗传优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1.数据均为Excel数据&#xff0c;直接替换数据就可以运行程序。 2.所有程序都经过验证&#xff0c;保证程序可以运行。 3.具有良好的编程习惯&#xf…

linux centos rabbitmq3.7.5 一键安装部署

linux centos rabbitmq3.7.5 一键安装部署 一、基础理论二、kafka和rocketmq、rabbitmq的区别三、下载所需安装包四、一键安装 一、基础理论 RabbitMQ是一个实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息代理软件&#xff0c;其作用主要体现在以下几个方面&a…

Docker 查看源地址/仓库地址,更改

一、源地址文件配置路径。若有docker文件夹&#xff0c;没有json&#xff0c;可以新增&#xff0c;复制进去内容 /etc/docker/daemon.json {"registry-mirrors": ["https://dockerhub.azk8s.cn","https://hub-mirror.c.163.com"&#xff0c;&q…

“北京到底有谁在啊”影视APP开发,解锁最简单的快乐

随着电视剧《玫瑰的故事》在腾讯视频APP热播&#xff0c;APP也增加了很多热度&#xff0c;一款丰富的影视APP&#xff0c;无论是热门大片、经典影视剧、还是最新综艺节目&#xff0c;能畅享无限精彩的影视内容&#xff01; 开发影视APP&#xff0c;需要专业的技术服务商来解决…

k8s手撕架构图+详解

“如果您在解决类似问题时也遇到了困难&#xff0c;希望我的经验分享对您有所帮助。如果您有任何疑问或者想分享您的经历&#xff0c;欢迎在评论区留言&#xff0c;我们可以一起探讨解决方案。祝您在编程路上顺利前行&#xff0c;不断突破技术的难关&#xff0c;感谢您的阅读&a…

使用nvm切换node版本时报错:exit status 1解决办法

作者介绍&#xff1a;计算机专业研究生&#xff0c;现企业打工人&#xff0c;从事Java全栈开发 主要内容&#xff1a;技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流&#xff08;SCI论文两篇&#xff09; 上点关注下点赞 生活越过…

项目开发 TCP-Socket连接功能实现(Android端)

前段时间在公司做项目的时候遇到了一个功能需要使用TCP-Socket连接硬件设备进行通信&#xff0c;查了很多资料也只是关于HTTP-Socket相关的&#xff0c;没法满足项目的要求&#xff0c;后来查到一个相关的插件&#xff0c;现在有时间和大家分享一下。 项目简单介绍&#xff1a…

基于STM32+华为云IOT设计的智能冰箱(华为云IOT)

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】摘要 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 二、部署华为云物联网平台2.1 物联网平台介绍2.2 开通物联网服务2.3 创建产品&#xff08…

Stateflow快速入门系列(-):构造并运行 Stateflow 图

Stateflow 提供了一种图形语言&#xff0c;包括状态转移图、流程图、状态转移表和真值表。您可以使用 Stateflow 来说明 MATLAB 算法和 Simulink 模型如何响应输入信号、事件和基于时间的条件。 Stateflow 使您能够设计和开发监控、任务调度、故障管理、通信协议、用户界面和混…

Windows USB设备驱动开发 - 常见概念的解释

我们听到许多 USB 术语几乎交替抛出。 它们都是什么意思&#xff1f;假设我们看到类似 “多亏了 USB 3.0&#xff0c;我可以将 SuperSpeed U 盘连接到电脑的 xHCI 主机控制器&#xff0c;并更快地复制文件。” 让我们了解该句子中的 USB 术语。 USB 3.0、USB 2.0 和 USB 1.0 请…