在
vs2005
如何使用
cppunit
1.
编译
cppunit
目前在
vs2005
下直接编译
cppunit
工程是编译不过去的。还要对
cppunit
工程做一下适当的改动才能成功编译。
虽然网上有些文章介绍使用
CPPUnitProjectWizard
。这个是编写测试工程的时候使用的,类似win32工程向导。
首先,在对
CppUnitLibraries
解决方案做编译之前,需要在硬盘的
cppuint
目录下新建一个与
src
文件夹同级的
lib
文件夹。在
1.12.0
版本下这个问题已经解决。但是在
1.12
之前的版本还需要手动去建
lib
文件夹
。
其次:在编译
TestRunner
这个工程之前,需要先对
MsDevCallerListCtrl.cpp
文件做一下更改。
将
#import
"libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("7.0") lcid("0") raw_interfaces_only named_guids
改为
#import
"libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("8.0") lcid("0") raw_interfaces_only named_guids
这样将会从
"%common_files%/MicrosoftShared/MSEnv/dte80a.olb"
导入
dte80a.olb.
最后,将
DSPlugIn
这个工程从解决方案里删掉,因为它只支持
vc6.0
。做过这些处理后
vs2005
就应该可以成功编译
cppunit
。
2.
vs2005
下的环境配置
开发环境中,在
vs2005
的工具菜单下选项
->
项目和解决方案
- > vc++
目录设置好
Include
和
Lib
引用路径。例如:在包含文件选项下加入
C:/cppunit/lib
。在库文件选项下加
C:/cppunit/include
。另外最好在计算机的系统环境变量下将
lib
路径添加到
path
变量下
,
这样就不用把
dll
拷来拷去。
3.
一个基于
GUI
的界面测试程序的例子
首先建一个基于扩展
mfc
的动态库工程
DemoDll
。
再新建一个
CDemo
类
(
被测试类
)
头文件
#pragma
once
class
AFX_EXT_CLASS CDemo
{
public
:
CDemo(void);
virtual ~CDemo(void);
int Add(int i);
int Subtration(int i);
public
:
int m_iOper;
};
cpp
文件
#include
"StdAfx.h"
#include
"Demo.h"
CDemo::CDemo(void)
{
m_iOper = 0;
}
CDemo::~CDemo(void)
{
}
int
CDemo::Add(int i)
{
return m_iOper += i;
}
int
CDemo::Subtration(int i)
{
return m_iOper -= i;
}
在同个一解决方案下新建一个测试工程用于测试这个
Demo
类
新建一个基于
Dialog
的工程
DemoMfcUnitTest
。在项目属性里
链接器
->
输入
->
附加依赖项下输入
cppunitd_dll.lib
、
testrunnerd.lib
(
DEBUG
)或
cppunit_dll.lib
、
testrunner.lib
(
Release
)
并需要将被测试类的头文件路径添加到项目属性里
c/c++->
附加包含目录里。例如:
../
DemoDll
。同时在项目依赖项中把
Demodll
设为依赖项。另外,要注意保证这两个工程的输出目录相同。
在
App
类中
添加下列头文件
#include
"cppunit/extensions/TestFactoryRegistry.h"
#include
"cppunit/ui/mfc/TestRunner.h"
#include
"TDemoMfc_CDemo.h" //
测试用例类头文件
并在
IninInstance()
函数中把显示对话框的代码注销掉并在原地曾加下列代码用以显示测试界面。
CppUnit::MfcUi::TestRunner runner;
CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry(CTDemoMfc_CDemo::RegCaseName());
runner.addTest(registry.makeTest());
runner.run();
return true;
之后构建一个测试用例类。
头文件:
#pragma
once
#include
"cppunit/TestCase.h"
#include
"CppUnit/extensions/HelperMacros.h"
#include
<string.h>
#include
"Demo.h" //
被测试类
class
CTDemoMfc_CDemo : public CppUnit::TestCase
{
//
宏定义
CPPUNIT_TEST_SUITE(CTDemoMfc_CDemo); //
开始声明一个新的测试程序集
CPPUNIT_TEST(TestAdd); //
添加TestAdd测试函数到测试程序集
CPPUNIT_TEST(TestSubtration); //
添加TestSubtration测试函数到测试程序集
CPPUNIT_TEST_SUITE_END(); //
声明结束
public
:
CTDemoMfc_CDemo(void);
void TestAdd();
void TestSubtration();
static std::string RegCaseName() { return "CTDemoMfc_CDemo";}
public
:
~CTDemoMfc_CDemo(void);
};
Cpp
文件
#include
"StdAfx.h"
#include
"TDemoMfc_CDemo.h"
#include
"cppunit/extensions/TestFactoryRegistry.h"
#include
"cppunit/TestAssert.h"
//
对指定程序集进行注册
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CTDemoMfc_CDemo,CTDemoMfc_CDemo::RegCaseName());
CTDemoMfc_CDemo::CTDemoMfc_CDemo(void)
{
}
CTDemoMfc_CDemo::~CTDemoMfc_CDemo(void)
{
}
void
CTDemoMfc_CDemo::TestAdd()
{
CDemo cDemo;
int iResult = cDemo.Add(10);
//
宏判断两个值是否相等
CPPUNIT_ASSERT_EQUAL(iResult,10);
}
void
CTDemoMfc_CDemo::TestSubtration()
{
CDemo cDemo;
int iResult = cDemo.Subtration(10);
//
宏判断两个值是否相等
CPPUNIT_ASSERT_EQUAL(iResult,-10);
}
最后编译并运行这个工程就会看到
CppUnit
的
GUI
测试界面。
关于
Cppunit
详细的介绍,可以访问
http://morningspace.51.net/resource/cppunit/cppunit_anno.html
。这上面对
cppunit
的描述即全面又详细。