CPPUNIT使用说明
平 台: winxp、VS2005
编写日期 2010-07-22
第一步:下载
CPPUNIT的主页是http://sourceforge.net/projects/cppunit/
(或者http://download.csdn.net/source/2568414),从这里可以获取它的源代码cppunit-1.12.1.tar。
第二步:解压
解压 cppunit-1.12.1.tar.gz到C:/cppunit-1.12.1或自己想要的目录(在此我放到F:/test下),如图:
第三步:
打开src/CppUnitLibraries.sln(有的下面是src/CppUnitLibraries.dsw),如果是VC 7及以上版本,会有一个对话框询问是否将工程转换成更高版本,选择“Yes to all”进行转换,如图:
第四步:
找到src/msvc6/DSPlugIn下的StdAfx.h文件,将#error This add-in is for VC++ 6.0 only.注释掉
第五步:
选择“Build | Batch Build...”,选中所有的项目,点击build按钮。在lib下生成所需要的所有库文件(debug下)如图:
注:链接过程中会报错:
error C3505: cannot load type library '{80CC9F66-E7D8-4DDD-85B6-D9E6CD0E93E2}'
出错的文件是:src/msvc6/testrunner/MsDevCallerListCtrl.cpp。这是由于使用VC 8.0编译的缘故,需要修改一下它的源码,打开该文件,找到出错行(#67),将其替换为:
#if _MSC_VER >= 1400 // VC++ 8 or more
//The following #import imports EnvDTE based on its LIBID.
#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("8.0") lcid("0") raw_interfaces_only named_guids
//The following #import imports EnvDTE80 based on its LIBID.
#import "libid:1A31287A-4D7D-413e-8E32-3B374931BD89" version("8.0") lcid("0") raw_interfaces_only named_guids
#else // vc7
#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("7.0") lcid("0") raw_interfaces_only named_guids
#endif
修改后重新编译。
第六步:
将include和lib文件夹加入到VC++的环境中。打开:Tools|Options|Projects and Solutions|VC++ Directories,将这两个文件夹的路径分别加入到Include files和Library files中。最好再将lib文件夹加入到系统环境变量PATH中,这样就不用再将其中的动态链接库拷到工程目录下而直接运行单元测试了。至此,CPPUnit的编译安装就完成了。
如图:
第七步:
下载 CPPUnitProjectWizard http://cppunit.sourceforge.net/cppunit-wiki/CppUnitVisualStudio2005Wizard?action=AttachFile&do=get&target=CPPUnitProjectWizard.7z(注:这个网址应经不能用了,在网上查了很久都没找到),建议到这下载:http://download.csdn.net/source/2568419
第八步:
CPPUnitProjectWizard.vsdir - 为向导命名
CPPUnitProjectWizard.vsz - 让VS知道从哪里找到向导
到Visual Studio 2005安装目录下的 VCProjects 文件夹中,… /VC/vcprojects下。
第九步:
把整个CPPUnitProjectWizard解决方案文件夹复制到您的Visual Studio 8安装目录下的VCWizards文件夹中。如图:
比如,我放在…/VC/VCWizards下
或者,也可以放在你想放置的其它地方,然后编辑CPPUnitProjectWizard.vsz,定义参数 ABSOLUTE_PATH
Param="ABSOLUTE_PATH = …VC/VCWizards/ CPPUnitProjectWizard"
第十步:
配置环境变量
右键我的电脑—>属性à高级—>环境变量àPath 加上lib的路径,我的为E:/cppunitspace/cppunit/lib
此时我们的环境就配置好了!接下来我们写一个例子:
第一步:
打开vs2005,新建一个MFC的项目名为:TestCppUnit如图:
点击ok后弹出界面,勾选如图:
Finish。此时项目建立好了。
第二步:
打开TestCppUnit.cpp文件,增加包含文件和声明使用库代码
#include <cppunit/ui/mfc/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#pragma comment(lib, "cppunitd.lib")
#pragma comment(lib, "testrunnerud.lib")
如图:
注:如果为Release版本声明使用库文件为
#pragma comment(lib, "cppunit.lib")
#pragma comment(lib, "testrunner.lib")
第三步:
找到InitInstance()函数:注释掉一下代码:
CTestCppUnitDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
增加一下代码:
CPPUNIT_NS::MfcUi::TestRunner runner;
runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest() );
runner.run();
如图:
第四步:
编译运行出现如下图界面,此时未加任何用例的单元测试例子界面就出来了:
第五步:
添加测试代码
a) 添加一个c++类example,其基类是public CPPUNIT_NS::TestFixture
b) 修改example.h
如下:
#pragma once
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/TestFixture.h>
class example :public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE(example);
CPPUNIT_TEST_SUITE_END();
public:
example(void);
~example(void);
};
c) 修改example.c
如下:
#include "stdafx.h"
#include "example.h"
CPPUNIT_TEST_SUITE_REGISTRATION(example);
example::example(void)
{
}
example::~example(void)
{
}
d) 此时,编译运行,可以发现出现了测试包example
e) 添加测试包初始化、结束函数setUp,tearDown(注意大小写)。以及添加测试用例testcase1,testcase2
说明,每一个用例,都会调用setUp和tearDown
故而上述运行结果应该是:按出现顺序。
f) 添加其他用例
CPPUNIT_ASSERT是一个宏,判断后面的参数是否正确,CPPUNIT还有很多宏,如
CPPUNIT_ASSERT(condition) // 确信condition为真
CPPUNIT_ASSERT_MESSAGE(message, condition) // 当condition为假时失败, 并打印message
CPPUNIT_FAIL(message) // 当前测试失败, 并打印message
CPPUNIT_ASSERT_EQUAL(expected, actual) // 确信两者相等
CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual) // 失败的同时打印message
CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, delta) // 当expected和actual之间差大于delta时失败
g) 单元测试结果
假如测试中所有断言都通过,则结果为绿色。
假如由一个断言失败,则显示红色,下面显示出错位置,且双击可以找到源代码位置。
添加其他测试代码