CPPUnit使用方法初探
来源:互联网 发布:linux下lnmp环境搭建 编辑:程序博客网 时间:2024/05/28 11:28
一、 配置cppunit的方法
编译
1. 编译$BASE/src/cppunit/CppUnitLibraries.dsw中的cppunit_dll项目,release版生成cppunit_dll.lib和cppunit_dll.dll,debug版生成cppunitd_dll.lib和cppunitd_dll.dll。这是CPPUnit基本类库。
2. 编译$BASE/src/cppunit/CppUnitLibraries.dsw中的TestRunner项目。release版生成TestRunner.lib和TestRunner.dll,debug版生成TestRunnerd.lib和TestRunnerd.dll。这是使用MFC的图形化界面的类库。
3. 把所有lib文件放置到CommonFiles/Lib目录下面。
4. 把dll文件放到相应的debug和release可执行目录下面。
设置VC
1. 在vc的Option中设置cppunit的头文件路径。是$BASE/include目录。
2. 在stdafx.h中添加
#ifndef _DEBUG
#pragma comment(lib, "..//..//CommonFiles//Lib//cppunit_dll.lib")
#pragma comment(lib, "..//..//CommonFiles//Lib//TestRunner.lib")
#else
#pragma comment(lib, "..//..//CommonFiles//Lib//cppunitd_dll.lib")
#pragma comment(lib, "..//..//CommonFiles//Lib//TestRunnerd.lib")
#endif
因为debug和release版使用的库是不相同的
二、不使用辅助宏的CPPUnit使用方法
新建一个基于对话框的exe程序。
测试类
建立一个测试类CPlusTest:
#pragma warning(push, 3)
#include "../../cppunit/include/cppunit/testFixture.h"
#include "../../cppunit/include/cppunit/testAssert.h"
#pragma warning(pop)
class CPlusTest : public CppUnit::TestFixture
{
public:
CPlusTest();
virtual ~CPlusTest();
void setUp()
{
x = 1;
y = 2;
};
void tearDown()
{
x = 0;
y = 0;
};
void TestEqual1()
{
CPPUNIT_ASSERT(x + y == 4);
};
void TestEqual2()
{
CPPUNIT_ASSERT(x + y == 3);
}
private:
int x;
int y;
};
说明:
测试类一般继承自TestFixture,它用来表示一个测试对象,用来组织测试用例。
在每个测试用例执行之前,其所属类的setUp都会执行;之后,其所属类的tearDown都会执行。对本例而言,运行TestEqual1之前会执行setUp,之后会执行tearDown;运行TestEqual2之前也会执行setUp,之后也会执行tearDown。
CPPUNIT_ASSERT用来判断括号内的值是true或者false。如果true,则表示测试成功;否则表示测试失败。也有一些别的宏可以使用。
主函数
在主cpp文件中添加下面包含语句
#pragma warning(push, 3)
#include "../../cppunit/include/cppunit/ui/mfc/TestRunner.h"
#include "../../cppunit/include/cppunit/testCaller.h"
#include "../../cppunit/include/cppunit/testResult.h"
#include "../../cppunit/include/cppunit/testSuite.h"
#pragma warning(pop)
在InitInstance添加下面代码,并去掉显示之前对话框的代码
CppUnit::MfcUi::TestRunner runner;
CppUnit::TestSuite suite("test");
CppUnit::TestCaller<CPlusTest> test1("TestEqual1",
& CPlusTest::TestEqual1);
CppUnit::TestCaller<CPlusTest> test2("TestEqual2",
&CPlusTest::TestEqual2);
suite.addTest(&test1);
suite.addTest(&test2);
runner.addTest(&suite);
runner.run();
说明:建立一个名字叫test的test suite。然后建立两个test case,分别名为TestEqual1和TestEqual2,对应的测试函数分别是CPlusTest::TestEqual1和CPlusTest::TestEqual2。
然后将两个测试用例添加到测试suite中。
最后把测试suite添加到runner。此处的runner是一个mfc图形界面的,也可以是文本方式的。
使用图形界面,test suite和test case分别对应着树枝和树叶,runner对应着树根。test suite可以包含别的test suite,runner也可以直接包含test case。
三、 使用辅助宏的CPPUnit使用方法(推荐)
上面方法必须在主函数中做大量添加test suite和test case的操作。为了方便使用,CPPUnit提供了一些宏。
测试类的改进
在测试类的声明开始添加下面四句
CPPUNIT_TEST_SUITE(CPlusTest);
CPPUNIT_TEST(TestEqual1);
CPPUNIT_TEST(TestEqual2);
CPPUNIT_TEST_SUITE_END();
说明:要在类的最开头,即public前面加上这些语句。该类的TestEqual1和TestEqual2分别作为一个test case放在一个test suite中。该test suite的名称是类的名称,即“CPlusTest”
在对应的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”)。
另外只需要包含文件
#include "../../cppunit/include/cppunit/extensions/HelperMacros.h"
主函数的改进
主函数中只需要包含TestRunner.h
在InitInstance中只需要具有下面的语句
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”。
CppUnit将所有的单元测试按照树的结构来表示。在CppUnit中,最小的测试单元,称为TestMethod测试方法,而多个相关的测试方法又可以组成一个TestCase测试用例。多个测试用例又组成TestSuite测试包。测试包互相嵌套在一起,就形成了上面我们看到的树结构。我们可以选择其中任意的树节点来进行单元测试。
注意事项:
在你的VC project中打开RTTI开关。 具体位置Project Settings/C++/C++ Language。 1 CPPUNIT源码编译阶段的问题 在使用vs2003以上版本的Visual Studio时, build project TestPlugInRunner会失败,出现如下的Error: 重新Build该Project即可。 另外注意版本的对应 Unicode要对应上Unicode版本. CPPUNIT_TEST_SUITE_NAMED_REGISTRATION() 添加一个TestSuite到一个指定的TestFactoryRegistry工厂
这 是因为CppUnit会用到VS IDE来定位和显示错误的Test Case的源文件和代码行, 而导入的IDE Com对象的Version不正确,只需要把Project TestPlugInRunner 文件MsDevCallerListCtrl.cpp 67行
#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("7.0") lcid("0") raw_interfaces_only named_guids
改为:
- CPPUnit使用方法初探
- cppunit使用方法
- CppUnit单元测试使用方法
- cppunit测试工具的使用方法步骤
- cppunit
- cppunit
- CPPUnit
- cppunit
- Cppunit
- CppUnit
- cppunit
- 初探vs2010的使用方法
- ActivityLifecycleCallbacks使用方法初探
- Android开发 - ActivityLifecycleCallbacks使用方法初探
- Android开发 - ActivityLifecycleCallbacks使用方法初探
- 暴雨夜初探EventBus使用方法
- Android开发 - ActivityLifecycleCallbacks使用方法初探
- CppUnit使用指南
- 临时表的引用
- MM给男生的60条消息,很感人
- MFC窗口过程函数之偷梁换柱
- 随摘
- 实例讲解java中==和equals的区别
- CPPUnit使用方法初探
- 史玉柱经典语录
- Ehcache 1.5.0 User Guide - Cache Configuration 缓存配置(2)
- 查找数据库所有表以及表的所有列
- libtiff使用小记
- Eclipse的安装过程
- 初探计算机病毒世界(1)--感染
- 集合操作的利器:CollectionUtils
- 需求老变是错觉,需求老多是幻觉