学习笔记:解读CppUnit源码3

C++——测试工具CppUnit的安装和配置 The first port of JUnit to C++ was done by Michael Feathers. His versions can be found on the XProgramming software page. They are os-specific, so Jerome Lacoste provided a port to Unix/Solaris. His v 阅读详情

 Test类就是抽象我们的测试用例的,那么Test类是直接new来创建的吗?当然不是的。在创建设计模式中,有一种创建叫做TestFactory。就是工厂模式。

TestFactory.h

既然Test类是抽象类,那么工厂当然也是抽象的也就不奇怪了。对应装置器也应该有一个创建工厂:TestFixtureFactory

TestFixtureFactory.h

TestFixtureFactory是对应抽象的类,ConcretTestFixtureFactory当然是实现类了,而ConcretTestFixtureFactory类也用到了类模板。这个类模板参数是什么就从工厂里创建什么类。在用宏来创建对象的情况下,这个设计是相当的灵活阿。

下面再看看第三个工厂。也是一个很重要的工厂:TestSuiteFactory

TestSuiteFactory.h

这个工厂也用了模板参数,作用嘛和第二个讲的道理一样。调用指定类的suite方法,那么suite方法是在哪里的呢?是在CPPUNIT_TEST_SUITE_END宏所展开的代码里。也就是调用主测类的一个叫suite名字的静态方法。

下面回到工厂的正题:TestFactory的实现类,

TestFactoryRegistry.h

TestFactoryRegistry.cpp

TestFactoryRegistryList类存在于TestFactoryRegistry.cpp中,是用来管理测试用例工厂的类

关于TestFactoryRegistry的代码个人觉得比较难懂。首先想说明的是TestFactoryRegistryList里面其实是一组测试用例工厂,每个工厂是以名字为关键字,所以工厂list的主要数据结构是map。而TestFactoryRegistry的数据结构set中,包含的是自身,所以这样就有了层次结构了。当然在真实的代码中,TestFactoryRegistryList是inner class。

下面介绍最后一个与创建相关的类:

AutoRegisterSuite.h

又看到模板类的参数了,TestCaseType的作用和前面一样,为了让类增加灵活性。而它的两个聚合物一个是TestFactoryRegistry,而另一个是TestSuiteFactory<TestCaseType>,这个用来管理调用具体主测类的Suite的创建的工厂。

有些人一定也注意到了,TestFactoryRegistry的父类是TestFactory,而TestSuiteFactory的父类也是TestFactory。所以说白了这里就是将一组测试包(TestSuiteFactory)注册到TestFactoryRegistry中。那么如果名字相同怎么办呢?这个嘛TestFactoryRegistry::getRegistry(name)是单例模式,是否注册就让它去决定把。(单例嘛当然只有一份实体)。

CppUnit使用 CppUnit是C++语言的单元测试框架,移植自Java的JUnit。它提供了丰富的断言宏(如CPPUNIT_ASSERT、CPPUNIT_ASSERT_EQUAL等)用于验证测试结果,支持文本和GUI两种测试运行方式,并包含多个示例项目展示不同测试场景。Visual Studio也内置了C++测试框架支持,包括Microsoft单元测试框架、Google Test等,提供了TEST_CLASS、TEST_METHOD等宏来组织测试代码,以及初始化/清理方法、测试属性等功能。 阅读详情

相关推荐

实战指南:如何用Kamailio+FreeSWITCH搭建高并发企业通信系统(附配置模板)

本文提供了一份实战指南,详细介绍了如何利用Kamailio与FreeSWITCH构建高并发企业通信系统。通过将Kamailio作为高性能SIP信令平面处理路由与负载均衡,FreeSWITCH作为媒体与应用平面负责通话与业务逻辑,实现信令与媒体分离的电信级架构。文章深入解析了架构设计、核心配置、集群部署与性能优化,并附有配置模板,旨在帮助企业构建可水平扩展、高可用的通信解决方案。

dell8的博客 364

CppUnit源码解读

名称 CppUnit源码解读  作者 晨光(Morning)  简介 本教程整理自站长的CppUnit源码阅读笔记,CppUnit

蜗牛档案室 4716

SIMPLIS仿真软件2.2-SIMPLIS快速入门2

SIMPLIS仿真软件2.2-SIMPLIS快速入门2导读 导读 本文承接上一篇文章。开始介绍SIMPLIS仿真部分。正如上一篇所讲的快速入门的定位,该文对SIMPLIS的三种分析模式不会很深入的讲解,只会记录下一些重要的设置和操作。对于SIMPLIS的三种分析模式的详细讲解,后面会专门撰写。如果读者还没有搭建上一篇文章中讲述的电路,那你可以点击这个链接免费下载所需的电路SIMPLIS_tutorial_buck_converter ,然后在这个电路的基础上继续进行以下操作。 ...

qq_44677482的博客 2万+

CppUnit源码解读(1)

【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/,moyingzz@etang.com序言 这一系列的文章摘选自笔者的《CppUnit源码解读》。 CppUnit是一个用c++语言实现的Open Source的单元测试框架,属于xUnit系列中的一员,是从JUnit移植过来的。[引言] 如何将诸多技术综合运用到一个

晴耕小筑 1497

【100%通过率】华为OD机试真题 Java&Go 实现【微服务的集成测试】【2023 Q1 | 100分】

现在有n个容器服务,服务的启动可能有一定的依赖性(有些服务启动没有依赖),其次服务自身启动加载会消耗些时间。给你一个nxn 的二维矩阵 useTime,其中 useTime=10 表示服务i自身启动加载需要消耗10s,useTimeli[j]=1 表示服务i 启动依赖服务i 启动完成,useTimei[k]=0,表示服务i 启动不依赖服务 k其实 0

MISAYAONE的博客 1万+

ardupilot开发 --- MavLink 篇

ardupilot开发 --- MavLink 篇

记录老板的每次pua,分享领导每天的毒鸡汤... 4252

学习笔记:解读CppUnit源码1

最近比较空,所以读了一个礼拜的cppUnit源码,感觉还不错。在读cppUnit源码里面,也用到了各种DesignPattern,STL,模板编程,宏的映射等等,还是有很多可以学习的地方。只是自己刚刚读了一个礼拜,当然还有很多地方是没有很好理解的。所以先把理解的地方写下来,边看边理解代码。首先介绍下cppUnit源码中最基本的基类Test. h//所有测试对象类的抽象基类,主要是定义run

千月星跡 1188

通过miniconda conda安装jupyer的时候报错: InvalidArchiveError(“Error with archive

摘要:本文针对Windows系统使用Conda时出现的InvalidArchiveError错误(文件路径过长或压缩包损坏),提供了解决方案。建议以管理员身份运行PowerShell并执行命令启用长路径支持(LongPathsEnabled),然后重启电脑或终端。作者通过该方法成功解决了jupyter安装问题。附有错误截图和解决后的成功截图。

猿小白的博客 788

学习笔记:解读CppUnit源码8

首先还是从如何测试开始剖析代码把,以下就是ExampleTestCase.h的代码 class ExampleTestCase : public CPPUNIT_NS::TestFixture{ CPPUNIT_TEST_SUITE( ExampleTestCase ); CPPUNIT_TEST( example ); CPPUNIT_TEST( anotherExampl

千月星跡 1266

KubeVela入门到精通-K8S多集群交付

KubeVela是一个功能强大、易于使用、高度可扩展的应用交付与管理平台。它基于Kubernetes和OAM 技术构建,通过开放应用模型(OAM)来作为顶层的抽像,提供了声明式部署、多集群/混合环境支 持、插件与扩展性、中心化管控以及易于使用与可观测性等特点。

小杨同学的博客 1270

使用IGV软件可视化染色质可及性

染色质可及性(chromatin accessibility)是指DNA序列在植物细胞核中的可访问程度。染色质是由DNA和蛋白质组成的复杂结构,它紧密地包裹在细胞核中,并影响基因的表达和功能。染色质可及性研究着重于理解染色质是否容易被转录因子和其他调控蛋白访问,从而影响基因的表达。文献中,常常会有下面这种图片来表示基因组上的一些区域或基因的染色质开放性强弱。一般情况下,我们可以使用IGV软件或GSA-man软件进行可视化,两者的操作相似。这里,以IGV软件为例,演示如何对染色质可及性进行可视化。

沉香best的博客 3724

CppUnit源码解读(5)

【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/,moyingzz@etang.com 断言 从这里开始,将要讲述core中,与断言相关的部分。 [Asserter] 相关文件:Asserter.h,Asserter.cpp Asserter并非类名,而是一个name space,它内嵌于CppUnit nam

晴耕小筑 1226

【2024/3/12 更新】Windows Server 2019 服务配置与管理汇总

本栏目一共介绍了17种Windows Server 2019 的服务配置与管理,为了方便大家阅读理解,特意总结了17种服务的一些内容。具体说明如下所示

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 2万+

CppUnit源码解读(3)

这里开始,将要讲述core中,测试结果记录的相关部分。 CppUnit是支持多线程的,你可以在一个线程中执行测试,在另一个线程中收集测试结果;或者在不同线程中并行执行多个测试,而用一个线程收集测试结果。framework中为此提供了简单而必要的支持。 [SynchronizedObject] [TestListener] [TestResult]  相关文件:SynchronizedO

第四跑道 846

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

CppUnit源码解读(6)

【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/,moyingzz@etang.com扩展部分(Extension) 在CppUnit中,除了提供基本的单元测试之外,还增加了很多扩展测试,比如:重复测试(RepeatedTest),正规测试(OrthodoxTest),这些内容都悉数收录在extension中。 [Te

晴耕小筑 1155

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

CppUnit源码解读(4)

【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/,moyingzz@etang.com 错误处理 [TestFailure] 相关文件:TestFailure.h,TestFailure.cpp CppUnit中有两种类型的错误,它们分别是:failure和error。一个failure是可预期的,并可以为断言(a

晴耕小筑 1037

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

学习笔记:解读CppUnit源码6

看了前面5章的话,就可以了解cppUnit大致的结构了。这里讲讲一些并不是很核心但却是不可货缺的代码。看看他们虽然学不到优秀的设计知识,但是巩固一下C++的基础也不错。SourceLine.h//SourceLine应该用这个接口来调用#define CPPUNIT_SOURCELINE() ::CppUnit::MySourceLine( __FILE__, __LINE__ )

千月星跡 1246

CppUnit源码解读(5) ---断言

从这里开始,将要讲述core中,与断言相关的部分。 [Asserter] [TestAssert]  相关文件:Asserter.h,Asserter.cpp Asserter并非类名,而是一个name space,它内嵌于CppUnit name space之中。该域中一共有四个函数,用来帮助编写和断言有关的宏,它们分别是:fail,failIf,failNotEqual,failN

第四跑道 1276

cppunit源码解读 1序言

感谢原创  http://morningspace.51.net/resource/cppunit/preface.html   output:掌管结果输出 helper:一些辅助类 extension:作为单元测试的延伸,对CppUnit core部分的扩展(比如:常规测试,重复测试) listener:监视测试进程和测试结果 textui:一个运行单元测试的文本环境 portabili

xinpo66的专栏 729

学习笔记:解读CppUnit源码5

cppUnit是支持多线程模式下测试的一种方法,在阅读TestListener之前我们不妨看看SynchronizedObject里面到底有什么东西。SynchronizedObject用来管理一个被同步对象,它定义了一个public属性的abstract inner class——SynchronizationObject,代表具备同步属性的对象 //此类定义了互斥锁功能,但具体行为需在

千月星跡 997

学习笔记:解读CppUnit源码2

 上次我详细的剖析了与Test.h相互关联的代码。Test类是cppUnit的核心。Test这个类相信看了上一章就知道,也就起到测试用例的作用,但是毕竟一个类的功能有限,如何扩充Test类的功能呢?下面装饰者模式就登场了。TestDecorator.h//装饰者模式:在TestDecorator的派生类中,这些功能将得到扩展class CPPUNIT_API MyTestDecorat

千月星跡 997
上一篇: 学习笔记:解读CppUnit源码2
下一篇: 学习笔记:解读CppUnit源码4
进击的横打
博客等级 码龄19年 2万+粉丝 1298原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值