VS2005配置CPPUnit进行单元测试

CPPUnit单元测试
本文介绍CPPUnit单元测试框架的两种使用方法:不使用辅助宏和使用辅助宏的方式。包括环境搭建、测试用例编写及测试运行等内容。

一、 编译CPPUnit工程

1、 解压文件cppunit-1.12.1.tar.gz。

2、 编译$BASE/src/cppunit/CppUnitLibraries.dsw中的cppunit_dll项目。这是CPPUnit基本类库。Release和debug版本需要同时编译。

3、 编译$BASE/src/cppunit/CppUnitLibraries.dsw中的TestRunner项目。这是使用MFC的图形化界面的类库。Release和debug版本需要同时编译。

注意:若使用VS2005编译,可能出现:

error C1104: fatal error importing libid: '80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2'

错误提示。只需要将其中7.0改为对应版本,比如8.0,重新编译即可。

4、 将编译生成的*.lib 和 *.dll 拷贝到目标程序执行目录下,在stdafx.h中增加如下代码:

#ifndef _DEBUG

#pragma comment(lib, "..//Debug//cppunit_dll.lib")

#pragma comment(lib, "..//Debug//TestRunner.lib")

#else

#pragma comment(lib, "..//Release//cppunit_dll.lib")

#pragma comment(lib, "..//Release//TestRunner.lib")

#endif

5、 通过菜单[Tools]à[Options],弹出对话框,Projects and Solutions中增加Include Files为$BASE/include。

二、 不使用辅助宏的CPPUnit使用方法

1、 新建一个基于对话框的MFC程序。工程名为CPPUnit。

2、 按照第一步的4、5步骤(也可以直接在工程中设置),使程序包含CPPUnit的头文件和编译时需要的*.lib文件。以及运行时需要的*.dll文件。

3、 增加C++类,CPlusTest,代码如下:

.h 文件

view plaincopy to clipboardprint?
#pragma once


#include <cppunit/TestFixture.h>
#include <cppunit/TestAssert.h>

class CPlusTest : public CppUnit::TestFixture
{
public:
CPlusTest(void);
virtual ~CPlusTest(void);

void setUp();
void tearDown();
void TestEqual1();
void TestEqual2();

private:
int x;
int y;
};
#pragma once


#include <cppunit/TestFixture.h>
#include <cppunit/TestAssert.h>

class CPlusTest : public CppUnit::TestFixture
{
public:
CPlusTest(void);
virtual ~CPlusTest(void);

void setUp();
void tearDown();
void TestEqual1();
void TestEqual2();

private:
int x;
int y;
};

.cpp 文件

view plaincopy to clipboardprint?
#include "StdAfx.h"
#include "PlusTest.h"

CPlusTest::CPlusTest(void)
{
}

CPlusTest::~CPlusTest(void)
{
}

void CPlusTest::setUp()
{
x = 1;
y = 2;
}

void CPlusTest::tearDown()
{
x = 0;
y = 0;
}

void CPlusTest::TestEqual1()
{
CPPUNIT_ASSERT(x + y == 4);
}

void CPlusTest::TestEqual2()
{
CPPUNIT_ASSERT(x + y == 3);
}
#include "StdAfx.h"
#include "PlusTest.h"

CPlusTest::CPlusTest(void)
{
}

CPlusTest::~CPlusTest(void)
{
}

void CPlusTest::setUp()
{
x = 1;
y = 2;
}

void CPlusTest::tearDown()
{
x = 0;
y = 0;
}

void CPlusTest::TestEqual1()
{
CPPUNIT_ASSERT(x + y == 4);
}

void CPlusTest::TestEqual2()
{
CPPUNIT_ASSERT(x + y == 3);
}

说明:

1) 测试类一般继承自TestFixture,它用来表示一个测试对象,用来组织测试用例。

2) 在每个测试用例执行之前,其所属类的setUp都会执行;之后,其所属类的tearDown都会执行。对本例而言,运行TestEqual1之前会执行setUp,之后会执行tearDown;运行TestEqual2之前也会执行setUp,之后也会执行tearDown。

3) CPPUNIT_ASSERT用来判断括号内的值是true或者false。如果true,则表示测试成功;否则表示测试失败。也有一些别的宏可以使用。

4、 在CPPUnit.cpp中加入以下头文件:

#include <cppunit/ui/mfc/TestRunner.h>

#include <cppunit/testCaller.h>

#include <cppunit/TestSuite.h>

#include <cppunit/TestResult.h>

在InitInstance()函数中加入以下代码:

view plaincopy to clipboardprint?
CppUnit::MfcUi::TestRunner runner;

CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("test");

CppUnit::TestCaller<CPlusTest>*pTest1=new CppUnit::TestCaller<CPlusTest>("TestEqual1", &CPlusTest::TestEqual1);

CppUnit::TestCaller<CPlusTest>*pTest2=new CppUnit::TestCaller<CPlusTest>("TestEqual2", &CPlusTest::TestEqual2);

pSuite->addTest(pTest1);

pSuite->addTest(pTest2);
runner.addTest(pSuite);

runner.run();
CppUnit::MfcUi::TestRunner runner;

CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("test");

CppUnit::TestCaller<CPlusTest>*pTest1=new CppUnit::TestCaller<CPlusTest>("TestEqual1", &CPlusTest::TestEqual1);

CppUnit::TestCaller<CPlusTest>*pTest2=new CppUnit::TestCaller<CPlusTest>("TestEqual2", &CPlusTest::TestEqual2);

pSuite->addTest(pTest1);

pSuite->addTest(pTest2);
runner.addTest(pSuite);

runner.run();

说明:

1) test suite和test case分别对应着树枝和树叶,runner对应着树根。test suite可以包含别的test suite,runner也可以直接包含test case。

2) TestRunner、TestSuite 、TestCaller删除子集合的时候都使用delete,子集合都应该使用new 分配,然后添加到子集合中。

5、 删除显示对话框的代码!运行后显示界面为:

图1.1 CPPUnit运行界面

三、 使用辅助宏的CPPUnit使用方法

上述的方法在主函数中做大量添加test suite和test case的操作,操作比较烦琐,为了简化,CPPUnit提供了一些宏。

1、 改进测试类,添加以下代码:

CPPUNIT_TEST_SUITE(CPlusTest);

CPPUNIT_TEST(TestEqual1);

CPPUNIT_TEST(TestEqual2);

CPPUNIT_TEST_SUITE_END();

说明:

1) 要在类的最开头,即public前面加上这些语句。该类的TestEqual1和TestEqual2分别作为一个test case放在一个test suite中。该test suite的名称是类的名称,即“CPlusTest”。

2) #include <cppunit/TestFixture.h>

#include <cppunit/extensions/HelperMacros.h>

2、 测试类对应的CPP文件开始加入:

CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CPlusTest, "plusTest");

说明:表示添加该类对应的suite(“CPlushTest”)到一个名字是plusTest的test suite。同时plusTest这个test suite会被注册。另外,也可以使用

CPPUNIT_TEST_SUITE_REGISTRATION(CPlusTest);

将该类对应的suite加入到默认的test suite中(“All Tests”)。

3、 在Initance()函数中加入如下代码:

CppUnit::MfcUi::TestRunner runner;

CppUnit::Test* pSuite = CppUnit::TestFactoryRegistry::getRegistry("plusTest").makeTest();

runner.addTest(pSuite);

runner.run();

说明:

图形化界面中包含了三层树结构。第一层是plusTest,第二层是CPlusTest,第三层是TestPlus1和TestPlus2。可以给getRegistry不指定参数使用默认注册的test case,即“All Tests”。


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/alicehyxx/archive/2009/08/25/4483681.aspx

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值