注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

中吴南顾惟一笑

成功法则就是那19个字

 
 
 

日志

 
 

C++的单元测试框架——CxxUnit  

2010-04-14 10:00:24|  分类: R&D |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
TUT(Template Unit Test)是一个不错的C++单元测试方案。它是用Template完成的(其实,CppUnit和CxxTest都有模板的部分)。随着C++编译器的进步,在大多数情况下,模板都是可以顺利通过编译的。但是,不要忘了,还有一种环境叫嵌入式,那里的编译器基本上还是很原始的,模板并不见得能够顺利的通过编译。

CxxUnit结构框架的复杂性处于TUT介于boost::test之间。添加新的测试工作量非常小;无须注册测试用例;可移植性很好;便于装卸;控制异常、崩溃方面的能力也不错;拥有良好的断言功能;支持多种输出方式;支持测试套件。
因为C++不支持reflection,所以,必须要做一些额外的工作,让框架知道相关内容的存在。CppUnit的做法是用宏进行注册。这种做法要求我们每添加一个测试,就要考虑用相应的宏进行注册,这种做法很繁琐,最大的问题在于由于疏忽而遗漏,这种靠人工保证的东西不可靠。CxxTest采用的方法比较特殊,有一个专门的脚本做这件事。通过这个脚本扫描分析C++的源文件,从中抽取测试方法,创建TestSuite。语法与JUnit非常相似,没有使用高级的C++特性,也没有定义特别的宏,无须写额外的代码。唯一的问题是引入了一个脚本,而且这个脚本一般是由某些动态语言写成的(目前的CxxTest有Perl和Python的脚本),从而引入了对这种语言的依赖。

优点:编译即测试方式,并且可以双击结果行立即定位到相应的源代码,相当吸引人;支持多种输出,输出结果较为详细;编写测试简单;

缺点:需要用到脚本对测试代码进行文法扫描,生成可执行代码,需要用到makefile文件(不是必须),准备工作比较麻烦。

vs2003中使用CxxTest测试框架

1. 下载CxxTest测试框架,并解压。

   http://jaist.dl.sourceforge.net/sourceforge/cxxtest/cxxtest-3.10.1.zip

2. 假设测试项目project1。在project1目录新建新建空白项目testpriject1。

3. 打开项目属性,修改属性“生成事件|预生成事件”,添加命令:

   {path to cxxtest}\cxxtestgen.pl --error-printer -o runner.cpp *.h

4. 修改属性“c/c++|附加包含目录”,添加{path to cxxtest}。

5. 在当前项目目录新建空白的cpp文件 runner.cpp并添加到项目中。

6. 编译执行。

vc命令行:

新建runtest.bat:

   ..\cxxtestgen.pl --error-printer -o runner.cpp TraitsTest.h
   cl /GX /I.. -o runner.exe runner.cpp
   .\runner.exe

vc GUI:

新建runtest.bat:

  ..\cxxtestgen.pl -o runner.cpp --gui=Win32Gui TraitsTest.h
  cl /GX /I.. runner.cpp /link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib   shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /OUT:runner.exe
    .\runner.exe -keep

gcc 命令行:(使用mingw)

新建runtest.bat:

   set path=E:\MingW\bin;%path%
   ..\cxxtestgen.pl --error-printer -o runner.cpp ..\TraitsTest.h
   g++ -o runner.exe -I .. runner.cpp
   .\runner.exe
   
   
eclipse cdt中配置CxxTest
1. 首先下载插件CxxTest for Eclipse.解压安装。
2. 启动eclipse,可以创建CxxTest工程了。通过File->New ->C++ Project->Empty Project w/ CxxTest创建直接支持CxxTest的工程,或者创建完普通c++工程后在工程属性中选择CxxTest支持即可。
3. 测试,创建CxxTest工程UnitTest,在工程上点右键,选择new ,选择CxxTest Suite,Name输入Test,Header under Test空着,如果要对类进行单元测试,此处选中类的头文件即可,Finish。
自动生成头文件Test.h
#ifndef TEST_H_
#define TEST_H_
#include <cxxtest/TestSuite.h>
class Test : public CxxTest::TestSuite
{
public:
   
};
#endif /*TEST_H_*/
 
自己写一个简单的测试:
void testAddition(void)
    {
        TS_ASSERT(1+1>1);
        TS_ASSERTEQUALS(1+1,2);
    }
 
保存,自动编译,出现链接错误/usr/bin/ld: cannot find -lintl。在工程属性中选择C/C++ Build ->Settings->GCC C++ Linker ->Libraries,删除intl一项。再次编译,成功。直接出现CxxTest的窗口,当然少不了令人激动的绿条了。
加入一个失败的测试:
void testMultiplication(void)
    {
        TS_ASSERT_EQUALS(2*2,5);
    }
 
编译。出现红条。
环境配置成功。
这个插件还提供了一个检查内存泄露的功能,很不错。  
  评论这张
 
阅读(2430)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017