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

逍遥子 曰:

得失失得 何必患得患失 舍得得舍 不妨不舍不得

 
 
 

日志

 
 

[原]VS系列IDE(2005、2008等)下使用cppunit的方法及使用示例  

2013-03-28 08:28:37|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一、    准备cppunit,

1、 下载并编译cppunit,这里以1.21.1为例,下载之后如图1所示为:


[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图1

2、    进入cppunit-1.12.1\src编译VC\VS工程文件,可能刚开始时候没有VS的工程文件sln,此时直接打开VC的工程文件,打开后进行转换,之后就会出现VS的工程文件,如下图2所示:

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图2

3、    编译之后即会在目录cppunit-1.12.1\lib下产生cppunit所需的动态库,如下图3所示:

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图3

编译完cppunit之后就可以使用它进行单元测试了,

二、    一个简单的cppunit例子,

1、    先创建一个“test_UT”工程,如下图4所示:

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:

 图4

在该工程包含一个CCaculater类,在该类中共有下列四个成员函数:

    double Add(double dNum1, double dNum2);     double Sub(double dNum1, double dNum2);     double Mult(double dNum1, double dNum2);     double Div(double dNum1, double dNum2);


下面我们就使用cppunit对CCaculater类进行测试:
2、    新建一个测试工程“cppunit_Test_UT”对上面的“test_UT”进行测试,一般情况下不要将测试工程和被测试的工程放在一个工程里,因为这样的测试对被测试的工程具有侵害性。过程如下图5所示:

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图5

该工程可以根据自己需要进行选择,这里选择Win32的Win32 Console Application工程,如下图6所示:

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图6

同时,该工程也不选择与编译头文件,故不要勾选此项,如下图7所示:

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图7

3、    创建之后的工程结构为如下图8所示:

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图8

4、    如果要在工程“cppunit_Test_UT”中使用cppunit对被测工程“test_UT”进行测试,则需要在测试工程工程“cppunit_Test_UT”中配置cppunit的头文件和库文件的路径。过程如下:
(1)在测试工程“cppunit_Test_UT”的项目名中右键单击,在弹出的菜单中选择 属性”Properties”,如下图9所示


                                                            [原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:

 图9

(2)在测试工程 “cppunit_Test_UT”中配置头文件路径,在弹出的窗体中,选择”Configuration Properties”=>”C/C++”=>”General”,单击右边的窗口的”Additional Include Directories”,如下图10中的红色2所标之处,在弹出的窗口中(下图9中3所示)点击,即可选择cppunit的include目录,需要注 意:目录需要选择到cppunit-1.12.1\include,例如cppunit-1.12.1放在了C盘那文件目录就是E: \cppunit-1.12.1\include

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:

图10

3)在测试工程 “cppunit_Test_UT”中配置动态库的路径,方法与(2)相似,把cppunit-1.12.1下面的lib文件夹加入即可,例如 cppunit-1.12.1放在了C盘那文件目录就是E: \cppunit-1.12.1\lib,如下图11所示:

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:

图11

(4)在测试工程“cppunit_Test_UT”中添加所需要使用的动态库名称cppunitd.lib testrunnerud.lib,方法如图12所示

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图12

配置完成,点击确定即可。
1、    将被测试的类添加到测试工程中,依次添加被测是类的头文件和源文件,方法如下图13所示:

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图13

如果添加头文件,则选 择”Header Files”,如果添加源文件则选择“Source Files”,在弹出的窗口中,把被测试类的文件选择进来,如图14选择头文件(其他文件的添加的方式也是如此),如图14,在弹出的窗口中到被测试的 “test_UT”工程下面把Calculater.h选择进来。

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图14

选择完成之后,如图15所示,被测试工程“test_UT”中的被测试类Calculater的”Calculater.cp”和”Calculater.h”文件已经添加到了测试工程”cppunit_Test_UT”中,

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图15

6、    在测试工程“cppunit_Test_UT”中,为被测试类Calculater添加测试类CTest_Calculater,需要注意的是:所有的 测试类都必须继承自CppUnit::TestFixture,因此需要为该测试类添加此基类,如下图16所示:

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图16

如果弹出基类不存在的提示,则选择是即可,如下图17所示:

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 图17

7、    修改测试类的头文件“Test_Calculater.h”;
(1)中新包含两个头文件:
#include <cppunit/extensions/HelperMacros.h>//CPPUNIT使用
#include "../test_UT/Caculater.h"//测试类CCaculater使用
(2)类的声明中添加cppunit的测试宏CPPUNIT_TEST_SUITE、CPPUNIT_TEST、CPPUNIT_TEST_SUITE_END,每添加一个测试函数都需要用宏CPPUNIT_TEST声明一下。
(3)在该类中添加类CCaculater的四个测试函数,
添加完成之后的头文件如下图所示:

//Test_Calculater.h
#pragma once
#include <cppunit/extensions/HelperMacros.h>
#include "../test_UT/Caculater.h"
class CTest_Calculater :
public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(CTest_Calculater);
CPPUNIT_TEST(Test_Add);
CPPUNIT_TEST(Test_Sub);
CPPUNIT_TEST(Test_Mult);
CPPUNIT_TEST(Test_Div);
CPPUNIT_TEST_SUITE_END();
public:
void setUp(){ }
void tearDown(){}
void Test_Add(void);
void Test_Sub(void);
void Test_Mult(void);
void Test_Div(void);
public:
CTest_Calculater(void);
~CTest_Calculater(void);
private:
bool IsEqual(double dNum1, double dNum2);

};

8、    在测试类的cpp文件的开头包含如下的宏定义:
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CTest_Calculater,"Test_Calculater");
添加完测试函数和上述宏之后的测试类源文件为

//Test_Calculater.cpp
#include "Test_Calculater.h"
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CTest_Calculater,"Test_Calculater");
CTest_Calculater::CTest_Calculater(void)
{
}

CTest_Calculater::~CTest_Calculater(void)
{
}

void CTest_Calculater::Test_Add(void)
{
CCaculater cc;
CPPUNIT_ASSERT_EQUAL(true,IsEqual(3,cc.Add(1,2)));
}

void CTest_Calculater::Test_Sub(void)
{
CCaculater cc;
CPPUNIT_ASSERT_EQUAL(true,IsEqual(3,cc.Sub(5,2)));
}

void CTest_Calculater::Test_Mult(void)
{
CCaculater cc;
CPPUNIT_ASSERT_EQUAL(true,IsEqual(10.0,cc.Mult(5,2)));
}

void CTest_Calculater::Test_Div(void)
{
CCaculater cc;
CPPUNIT_ASSERT_EQUAL(true,IsEqual(3,cc.Div(6,2)));
}

bool CTest_Calculater::IsEqual(double dNum1, double dNum2)
{
bool bRes = false;
bRes = ((dNum1 - dNum2) < 0.000001)&& ((dNum1 - dNum2) > -0.000001);
return bRes;
}



9、    工程中包含main函数的文件中,添加如下头文件

#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>
#include <conio.h>

并仿照下面的代码注册并运行测试用例

// cppunit_Test_UT.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>
#include <conio.h>

int _tmain(int argc, _TCHAR* argv[])
{
CppUnit::TextUi::TestRunner runner;

//test Calculater,下面这里“Test_Calculater”
//就是在“Test_Calculater.cpp”文件中开头的宏里面所定义的识别符号
CppUnit::TestFactoryRegistry &Rg_Test_Calculater=
CppUnit::TestFactoryRegistry::getRegistry("Test_Calculater");
runner.addTest(Rg_Test_Calculater.makeTest());

runner.run();
system("pause");
return 0;
}

10、    运行测试工程,可看到如下测试结果

[原] VS系列IDE(2005、2008等)下使用cppunit的方法及其实例 - 逍遥子 - 逍遥子 曰:
 
图18
  评论这张
 
阅读(1077)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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