我對CPPUNIT的一些理解(一直沒有時(shí)間,忘了很多東西,以后再整理):
一、測試用例
1、CPPUnit通常用于接口測試,如果進(jìn)行路徑測試,需要考慮一些特殊問題,因?yàn)榭赡苄枰L問被測類的保護(hù)或者私有成員。在這種情況下,可以考慮使用輔助類,輔助類從被測類派生,并將測試類聲明為友元。
2、測試類從TestFixture派生,該類聲明了setUp(),tearDown()函數(shù),分別進(jìn)行重載以用來初始化測試和釋放資源
3、在測試類的頭文件類聲明中使用以下宏進(jìn)行聲明測試套件
CPPUNIT_TESTSUITE(測試類名)
CPPUNIT_TEST(測試函數(shù)名1)
CPPUNIT_TEST(測試函數(shù)名2)
CPPUNIT_TEST_SUITE_END()
以上代碼將測試函數(shù)準(zhǔn)備好,測試函數(shù)原型為:void testX()
4、測試套件注冊使用以下宏
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(類名,名字空間)
CPPUNIT_TEST_SUITE_REGISTRATION(類名)
以上兩個(gè)宏在測試類的cpp文件開頭添加,第一個(gè)宏將測試類注冊到“名字空間”里,“名字空間”是一個(gè)字符串
第二個(gè)宏將測試類注冊到缺省名字空間里
5、cpp的實(shí)現(xiàn),以下例子是一個(gè)測試函數(shù)的實(shí)現(xiàn),完成的是路徑測試,其中CTest_CbackupSource從TestFixture派生
void CTest_CBackupSource::testMakeSourceName()
{
CMyBackupSource backupSource;
CPPUNIT_ASSERT(backupSource.m_strSourceName == "");
backupSource.SetSourcePath("C:\\test\\Test.tt");
CPPUNIT_ASSERT(backupSource.m_strSourceName == "Test.tt");
backupSource.SetSourcePath("C:\\test\\");
CPPUNIT_ASSERT(backupSource.m_strSourceName == "");
backupSource.SetSourcePath("test");
CPPUNIT_ASSERT(backupSource.m_strSourceName == "test");
}
二、運(yùn)行測試用例
//返回測試工廠對象的引用,缺省參數(shù)為“All Tests”,對應(yīng)于注冊在缺省空間的測試類,在以后測試運(yùn)行時(shí),注冊在缺省空間的測試用例將被運(yùn)行
CPPUNIT_NS::TestFactoryRegistry ®istry = CPPUNIT_NS::TestFactoryRegistry::getRegistry();
//添加命名空間后,注冊在該命名空間的測試用例將被運(yùn)行
registry.addRegistry("CBackupSource");
// registry.addRegistry("CVersionInfo");
// registry.addRegistry("CSHFile");
// 得到測試套件,包括所有選擇的測試空間內(nèi)注冊的測試用例
CPPUNIT_NS::Test* suite = registry.makeTest();
CPPUNIT_NS::TextUi::TestRunner runner;
runner.addTest(suite);
// 設(shè)置輸出,注意對象被runner釋放
runner.setOutputter(new CPPUNIT_NS::CompilerOutputter(&runner.result(), std::cerr));
// 增加監(jiān)聽器,eventManager返回TestResult類的對象,維護(hù)一個(gè)Listener集合,Listener將決定測試過程表現(xiàn),包括日志輸出格式
CPPUNIT_NS::BriefTestProgressListener progress;
runner.eventManager().addListener(&progress);
nRetCode = runner.run();
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。