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

33 篇文章 5 订阅
一、    准备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 Calculater
	CppUnit::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、    运行测试工程,可看到如下测试结果


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值