cppunit使用详解
cppunit使用详解
第一步:如何安装 (我的运行环境: fc7 Linux, gcc4)
cppunit 的安装是相当标准的linux的安装过程
a. 下载cppunit的源文件
b. 解压缩
c. 编译安装程序
$./configure --prefix=/data/soft/cppunit-1.12
$make
$make install
这里 -prefix=/data/soft/cppunit-1.12 的意思是把安装的根目录设置为 /data/soft/cppunit-1.12
安装完成以后头文件存储在/data/soft/cppunit-1.12/include,库文件存储在/data/soft/cppunit-1.12/lib。
因为不是安装在默认的位置所以在编译和连结的时候要指定路径。
例如:g++ -g -L/data/soft/cppunit-1.12/lib -lcppunit -ldl -I/data/soft/cppunit-1.12/include Main.C
注意这里的几个 -l选项, 尤其是 -ldl 选项。
第二步: 下面我介绍一下个人认为比较实用的测试程序的结构。
这个测试类从CppUnit::TestFixture派生,并且由下面的部分组成:
a. setUp() 方法
在这个方法里实现一些准备工作,例如生成一些被测类的实列
setUp(){
m_vertex = new Vertex( 'V' );
}
b. tearDown() 方法
在这个方法里实现扫尾的工作,例如释放内存
tearDown(){
//一些在setUp方法中申请的内存的清理工作
delete m_vertex;
}
c. 测试方法的方法
例如,在被测类里有一个方法叫做:bool operator==(MyComplex &a), 我们
要写一个名字叫作test_Equality的方法来测试。
void GraphTest::testConstructor()
{
CPPUNIT_ASSERT( m_vertex->label == 'V' );
CPPUNIT_ASSERT( m_vertex->wasVisited == true );
CPPUNIT_ASSERT( m_vertex->isInTreeVerts == true );
}
CPPUNIT_ASSERT用来判断里面的表达是是否为真。
d. 把几个测试方法“打包”为一个suite。
CppUnit::TestSuite *suite= new CppUnit::TestSuite();
suite->addTest(new CppUnit::TestCaller<GraphTest> ("testConstructor", &GraphTest::testConstructor));
测试类就是由这些方法组成。
e. 运行测试用例
CppUnit::TextUi::TestRunner runner;
runner.addTest( suite ); //指定运行TestSuite
//开始运行, 自动显示测试进度和测试结果
runner.run( "", true );
下面通过完整的源代码展现cppunit的使用方法。
|
#ifndef DIJKSTRA_H bool wasVisited; { #endif // file2 : GraphTest.h #include "dijkstra.h" #include "cppunit/TestFixture.h" class GraphTest : public CppUnit::TestFixture { // 初始化函数 void setUp (); void tearDown(); void testConstructor (); }; // file3 : GraphTest.cpp #include "GraphTest.h" void GraphTest::setUp() void GraphTest::tearDown() void GraphTest::testConstructor() // file4: main.cpp #include "GraphTest.h" // 添加一个测试用例 suite->addTest(new CppUnit::TestCaller<GraphTest> ("testConstructor", &GraphTest::testConstructor)); runner.addTest( suite ); //指定运行TestSuite //开始运行, 自动显示测试进度和测试结果 runner.run( "", true ); } |
好了。都准备好了,编译:
|
|
这个错误是由于没有找到 dlsym 等函数的链接库,制定下他们的连接库:
|
|
编译成功,运行:
|
!!! 1) test: testConstructor (F) line: 17 GraphTest.cpp <RETURN> to continue |
发现一个错误,构造函数没有按照我们想象的对成员变量 wasVisited 初始为 true
从而发现一个错误,修改 Vertex 的构造如下:
|
{ |
再次编译,运行,通过测试。
cppunit使用详解的更多相关文章
- Junit使用详解
http://junit.org/上详细介绍了Junit.JUnit is a simple framework to write repeatable tests. It is an instanc ...
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
随机推荐
- AppWidget框架
AppWidget 框架主要包括以下类: 1.AppWidgetProvider:继承自BroadcastReceiver,在AppWidget应用update.enable.disable和dele ...
- JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-003使用@AttributeOverrides
Each @AttributeOverride for a component property is “complete”: any JPA or Hibernate annotation on t ...
- STM32F05x加入RDP(LV1)后,Segger无法Unlock的解决办法
沿用之前CM3核的STM32F10X系列的加入RDP功能,之后在Segger的Unsecured Chip或者Unlock STM32的Cmd无法进行去除RDP,而Unlock STM32则提示无法识 ...
- 284. Peeking Iterator
题目: Given an Iterator class interface with methods: next() and hasNext(), design and implement a Pee ...
- CentOS7区域设置
区域设置的配置文件在/etc/locale.conf,通过localectl命令进行设置: systemd服务在启动的时候读取区域配置文件,完成系统的设置. 命令的几个常用方法如下: 1 查看当前配置 ...
- sqlite3加密支持
sqlite3加密支持 sqlite3免费版并不支持加密,不过留有接口,有不少开源的加密实现,不过有的需要使用openssl配置略显繁琐,不过使用wxsqlite比较方便. wxSqlite3 wxS ...
- HDU 4638 Group(分组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4638 题意:给出一个数列,若干询问.每次询问区间[L,R]的最少有多少段?每一段是连续的一段且这段内的 ...
- 第四篇 在中国做ERP系统实施你必须知道的一些常识
1. ERP实施要特别从参与全球竞争的视角指引系统建设.中国社会经历了一个从计划经济体制到市场经济体制的转变.中国加入WTO后,要与国际接轨,要按照世界贸易组织有关的贸易规则开展国际贸易.中国的关税与 ...
- [HDOJ2512]一卡通大冒险(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2512 给一个数n,问1~n这n个数内的划分.设dp(i,j)为i划分为j个集合时有多少个. 初始化条件 ...
- 视觉(3)blepo
视觉(3)blepo 把matlab转成c程序有好办法了,从网上下载了一个函数库blepo,转换为c几乎是一行对一行,openCv经常涉及到的内存申请和释放这里都不用管.高兴!看看这段程序比较一下差别 ...