CppUnit初识

 

概述:

        软件测试驱动开发(TDD)是以测试作为开发过程的中心,它坚持,在编写实际代码之前,先写好基于产品代码的测试代码。开发过程的目标就是首先使测试能够通过,然后再优化设计结构。测试驱动开发式是极限编程的重要组成部分。XUnit,一个基于测试驱动开发的测试框架,它为我们在开发过程中使用测试驱动开发提供了一个方便的工具,使我们得以快速的进行单元测试。XUnit的成员有很多,如JUnit,PythonUnit等。CppUnit是XUnit家族中的一员,它是一个专门面向C++的测试框架.

       在平时的编码过程中,需要使用CppUnit的测试框架,很多时候都是直接按照example中的测试代码进行相关的测试用例的设计和相关测试用例集合的注册,感觉对框架的整体运行不是很了解,所以想抽点时间边使用,边研究一下部分源码,方便自己,同时也可以学习到一些框架设计的知识,对自己的知识进行积累!

个人学习也参考了很多的相关资料,推荐一个写的比较好的博主博客,在这里特别需要感谢一下他了,O(∩_∩)O,有兴趣的可以先研究哈了!

连接地址:http://morningspace.51.net/resource/cppunit/cppunit_anno.html

相关CppUnit的历史知识,百度上都有很多,有兴趣的读者可以自己收集一下了解了。

初识:

       我个人对CppUnit框架的学习是从example中的源码开始,利用示例中的源码作为跟踪工具,对CppUnit的编译库进行运行时源码跟踪,以此来总结相关的学习知识点。对框架的学习我还是一个新手,这也是我学习的第一个框架,之所以选择它,是因为觉得它比较小,自己在工作中也经常用到;个人觉得对框架的学习首先必须要了解它整个的模块组织成分,然后针对各个模块或者是组件各个击破。

       学习源码的基本环境:CppUnit 1.9.10 + vs2008+windowsxp

根据相关的组织结构图,个人整理了框架的基本搭建图(UML的使用不是很会,很多只是为了对更好的分析问题,可能不是很正确,在后面的学习中改进)

portability模块:提供针对不同平台的移植设置,其中包括库文件的导入和导出,STL中容器的可移植性设置,输入输出流的可移植性的设置和是否支持RTTI(因为并不是所有的平台和编译器都可以支持C++语言的该特性,但是在CppUnit框架中需要对相关的测试集合的名字进行输出,需要使用到该功能)

core:CppUnit的核心部分,主要涉及到以下几大模块功能:

1、异常的封装(继承于C++标准异常类),在CppUnit中测试用例的运行有true、false和error三种情况,因此需要自己对相关的异常处理进行设置,对Exception的记录涉及到异常点产生的文件、相关的地方(location)、相关的异常信息,这些小的功能类在后期会进行说明;

2、CppUnit的核心测试成员,测试用例的抽象(TestCase)、测试用例的集合(TestSuite)、测试用例运行前后的环境(TestFixture)、测试用例运行控制器(TestResult,属于个人叫法,主要是对测试用例的运行过程进行控制)等。

在这一块中,主要使用的一个“设计思想”就是我们熟悉的composite模式(组合模式),在整个测试运行的过程中,实质是一个TestSuite的递归运行过程。

3、CppUnit支持在多线程环境下运行:SynchronizedObject具有该功能,很多单个的功能类都继承于该同步对象,你需要自己定义相关的互斥锁来满足同步的需求。

相关的功能类都比较多,在后期进行相关的研究。

protector:CppUnit异常结果的一个抽象包装类,提供了相关的测试环境的运行环境,并且让测试用例运行在该环境下,对于异常的收集过程也全部是在这里完成;在早期的CppUnit框架中,对异常的处理时直接混合在TestCase的run()过程中的,后期把这个模块单独提出来,通过TestResult进行控制,分离了相关关联性,提高了灵活性。这个模块的主要构建体现在如下几个方面:利用了STL中的“函数对象”的思想,同时也利用了设计模式中的“adapter”方法,把测试用例的运行适配成了一个函数对象的调用。

listener:CppUnit异常结果的收集对象的抽象,注册在TestResult中,在测试用例运行的过程中进行相关运行情况的记录,可以实现测试过程中的运行情况的事实反映和测试运行结束后的汇总分析。TestResultCollector和BriefTestProgressListener是其中比较重要的两个功能类。

output:CppUnit中测试用例运行结果输出。测试用例的执行情况需要很好的进行反映,为此CppUnit提供了丰富的结果输出UI界面,可以是基于文件界面的(我比较常用),也可以是基于UI设计界面的(MFC),还有就是可以基于XML结果输出(也支持文件结果的输出)

helper:CppUnit中很重要的帮助功能类的集合,提供了丰富的宏定义和相关的测试用例集合(TestSuite)的管理类,主要涉及到如何自动的注册TestSuite到全局的工厂函数,如何在运行过程中创建单元测试用例对象,主要涉及到的设计模式为“创建性模式”——工厂方法,单件模式等,提高了库用户使用的便利性。

extension:作为CppUnit单元测试的延伸,对CppUnit core部分的扩展(比如:常规测试,重复测试)

 模块组织:

个人画的一个CppUnit框架的一个核心的基本组织结构图,可能不是很准确,但是也应该可以部分反映这个框架的整个结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值