CppUnit源代码级单元测试,编写GUI类型的测试框架,主要步骤
------------------------------------------------------------------------------------------------------------
1. 建立一个基于Dialog的VC6工程, 将testrunnerd.dll文件拷到程序同目录下;
2. 在Setttings中,包含cppunitd.lib和testrunnerd.lib;
ps: 如果是release,则包含cppunit.lib和testrunner.lib;
ps: 如果是release,则包含cppunit.lib和testrunner.lib;
3. 在Setting中,打开RTTI开关;
4. 建立新类(如CmyTestCase),且public继承于 CppUnit::TestCase .
ex:
class CmyTestCase : public CppUnit::TestCase
{}
ex:
class CmyTestCase : public CppUnit::TestCase
{}
4. 在新类CmyTestCase的.h文件中,加上“#include "cppunit/extensions/HelperMacros.h"”.
5. 在新类CmyTestCase的.h文件中,加入cppunit宏,定义测试域和测试函数名;
ex:
CPPUNIT_TEST_SUITE(CmyTestCase);
// CPPUNIT_TEST(mytestItem1);
CPPUNIT_TEST_SUITE_END();
note:
CPPUNIT_TEST_SUITE宏内的类名必须是其所在类的类名,即CmyTestCase;
ex:
CPPUNIT_TEST_SUITE(CmyTestCase);
// CPPUNIT_TEST(mytestItem1);
CPPUNIT_TEST_SUITE_END();
note:
CPPUNIT_TEST_SUITE宏内的类名必须是其所在类的类名,即CmyTestCase;
6. 在InitInstance()函数中,屏蔽掉vc6生成的Dlg实例化部分,加上TestRunner实例化声明;
ex:
CppUnit::MfcUi::TestRunner runner;
runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );
runner.run();
ex:
CppUnit::MfcUi::TestRunner runner;
runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );
runner.run();
7. 在InitInstance()所在文件内,加入TestRunner和TestFactoryRegistry的头文件声明;
ex:
#include <cppunit/ui/mfc/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
note:
这两个头文件不能声明在vc6生成的"#ifdef _DEBUG"后面,否则系统将报17个new错误;
ex:
#include <cppunit/ui/mfc/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
note:
这两个头文件不能声明在vc6生成的"#ifdef _DEBUG"后面,否则系统将报17个new错误;
/* 1-7 OK后,GUI类型的CppUnit测试框架雏形基本OK,运行可看到测试界面,但无测试单元*/
------------------------------------------------------------------------------------------------------------------
8. 在CmyTestCase的.cpp文件中,添加该类的宏定义,向测试框架注册测试域;
ex:
CPPUNIT_TEST_SUITE_REGISTRATION(CmyTestCase);
ex:
CPPUNIT_TEST_SUITE_REGISTRATION(CmyTestCase);
9. 向CmyTestCase中添加包含测试内容的函数声明及实现;
ex:
void CmyTestCase::myTestItem1()
{
CPPUNIT_ASSERT_EQUAL(20, 20);
}
ex:
void CmyTestCase::myTestItem1()
{
CPPUNIT_ASSERT_EQUAL(20, 20);
}
10. 在CmyTestCase的类声明中添加有关测试单元的宏定义;
ex:
/* CPPUNIT_TEST_SUITE(CmyTestCase); */
CPPUNIT_TEST(myTestItem1);
/* CPPUNIT_TEST_SUITE_END(); */
ex:
/* CPPUNIT_TEST_SUITE(CmyTestCase); */
CPPUNIT_TEST(myTestItem1);
/* CPPUNIT_TEST_SUITE_END(); */
/* 8-10,实现测试单元的添加,至此,测试界面中可看到测试域和测试单元,测试框架基本OK */
//
参考地址: