軟件測試驅(qū)動開發(fā)(TDD)是以測試作為開發(fā)過程的中心,他是極限編程的重要組成部分,XUnit是一個基于測試驅(qū)動開發(fā)的測試框架,其成員很多包括:JUnit,PythonUint等,CppUint是其中一個專門面向c++的測試框架。
在CppUnit中小的測試單元稱為測試方法(TestMethod),多個測試方法又可以組成一個測試用例(TestCase),多個測試用例又組成一個測試包(TestSuite)
CppUnit提供了兩種測試環(huán)境,一種基于文本,一種基于GUI,在基于GUI的測試環(huán)境中,若測試不成功,進(jìn)度條顯示紅色,反之則為綠色。
Vs環(huán)境下CppUnit開發(fā)的基本流程(MFC方式的TestRunner)
首先在所建工程中App的Instance()中屏蔽掉原有的對話框,代之以CppUnit的GUI,一般為以下形式:
CppUnit::MfcUI::TestRunner runner;
Runner.addTest(PlusTest::suite());//添加測試
runner.run();//顯示UI
// PlusTest::suite()該函數(shù)返回一個指向CppUnit::Test的指針,這個指針是整個測試的起點(diǎn),CppUnit::TestFactoryRegistry()根據(jù)TestSuite的名稱返回TestFactoryRegistry工廠,然后調(diào)用工廠里的makeTest()對TestSuite進(jìn)行組裝,這是一個遞歸調(diào)用,將建立起一個樹狀的測試結(jié)構(gòu)
然后在工程頭文件中建立一個PlueTest.h的頭文件用以得到工廠并調(diào)用MakeTest函數(shù)
形式如下:
#include "cppunit/extensions/TestFactoryRegistry.h"
namespace PlusTest
{
CppUnit::Test*suite()
{
CppUnit::TestFactoryRegistry®istry =
CppUnit::TestFactoryRegistry::getRegistry("name");
return registry.makeTest();
}
}
Cpp文件所需頭文件為:
#include "cppunit/ui/mfc/TestRunner.h"
#include "cppunit/extensions/TestFactoryRegistry.h"
#include "PlusTest.h"
然后在工程中添加一個類,例如為:CplusTestCase
代碼如下:
#include <apr.h>
#include <cppunit/TestCase.h>
#include <cppunit/extensions/HelperMacros.h>
#include <unicode/unistr.h>
#pragma comment(lib,"icuuc.lib")
class CPlusTestCase :publicCppUnit::TestCase
{
//通過這幾個宏將類CPlusTestCase和方法testFind注冊到了測試列表中了
//開始創(chuàng)建一個TestSuite(測試包)
CPPUNIT_TEST_SUITE(CPlusTestCase);
//添加TestCase(測試用例)
CPPUNIT_TEST(testFind);
//結(jié)束創(chuàng)建TestSuite
CPPUNIT_TEST_SUITE_END();
public:
//!rief Set up context before running a test
virtual void setUp();//初始化數(shù)據(jù)成員
//!Clean up after the test run.
virtual void tearDown();//釋放清理工作
CPlusTestCase(void);
~CPlusTestCase(void);
//測試方法
void testFind();