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

来源:互联网 发布:三国志11 知乎 编辑:程序博客网 时间:2024/05/05 15:15
一、    准备cppunit,

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

图1

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

图2

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

图3

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

二、    一个简单的cppunit例子,

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

图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所示:

图5

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

图6

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

图7

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


图8

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


图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

图10

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

图11

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

图12

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

图13

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

图14

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

图15

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

图16

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

图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的四个测试函数,
添加完成之后的头文件如下图所示:

#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");
添加完测试函数和上述宏之后的测试类源文件为


#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 "stdafx.h"
#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 CalculaterCppUnit::TestFactoryRegistry &Rg_Test_Calculater=CppUnit::TestFactoryRegistry::getRegistry("Test_Calculater");//这里“Test_Calculater”就是在“Test_Calculater.cpp”文件中开头的宏里面所定义的识别符号runner.addTest(Rg_Test_Calculater.makeTest());runner.run();system("pause");return 0;}

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


原创粉丝点击