您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > cppUnit
便利的開(kāi)發(fā)工具CppUnit快速使用指南
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/7/16 10:31:18 ] 推薦標(biāo)簽:

對(duì) fixture 的所有測(cè)試用例可以被封裝在一個(gè) CppUnit::TestFixture 的子類(命名慣例是[ClassName]Test)中。然后定義這個(gè)fixture 的 setUp 和 tearDown 函數(shù),為每個(gè)測(cè)試用例定義一個(gè)測(cè)試函數(shù)(命名慣例是 testXXX)。下面是個(gè)簡(jiǎn)單的例子:

    class MathTest : public CppUnit::TestFixture { 
     protected: 
       int m_value1, m_value2; 
     public: 
       MathTest() {} 
        // 初始化函數(shù) 
       void setUp () { 
         m_value1 = 2; 
         m_value2 = 3; 
       } 
       // 測(cè)試加法的測(cè)試函數(shù) 
       void testAdd () { 
            // 步驟(2),對(duì) fixture 進(jìn)行操作 
         int result = m_value1 + m_value2; 
            // 步驟(3),驗(yàn)證結(jié)果是否爭(zhēng)取 
         CPPUNIT_ASSERT( result == 5 ); 
       } 
       // 沒(méi)有什么清理工作沒(méi)有定義 tearDown.  
     } 

在測(cè)試函數(shù)中對(duì)執(zhí)行結(jié)果的驗(yàn)證成功或者失敗直接反應(yīng)這個(gè)測(cè)試用例的成功和失敗。CppUnit 提供了多種驗(yàn)證成功失敗的方式:

    CPPUNIT_ASSERT(condition)                   // 確信condition為真 
    CPPUNIT_ASSERT_MESSAGE(message, condition)  // 當(dāng)condition為假時(shí)失敗, 并打印message 
    CPPUNIT_FAIL(message)                       // 當(dāng)前測(cè)試失敗, 并打印message 
    CPPUNIT_ASSERT_EQUAL(expected, actual)      // 確信兩者相等 
    CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual) // 失敗的同時(shí)打印message 
    CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, delta)   // 當(dāng)expected和actual之間差大于delta時(shí)失敗 

要把對(duì) fixture 的一個(gè)測(cè)試函數(shù)轉(zhuǎn)變成一個(gè)測(cè)試用例,需要生成一個(gè) CppUnit::TestCaller 對(duì)象。而終運(yùn)行整個(gè)應(yīng)用程序的測(cè)試代碼的時(shí)候,可能需要同時(shí)運(yùn)行對(duì)一個(gè) fixture 的多個(gè)測(cè)試函數(shù),甚至多個(gè) fixture 的測(cè)試用例。CppUnit 中把這種同時(shí)運(yùn)行的測(cè)試案例的集合稱為 TestSuite。而 TestRunner 則運(yùn)行測(cè)試用例或者 TestSuite,具體管理所有測(cè)試用例的生命周期。目前提供了 3 類TestRunner,包括:

    CppUnit::TextUi::TestRunner     // 文本方式的TestRunner 
    CppUnit::QtUi::TestRunner       // QT方式的TestRunner 
    CppUnit::MfcUi::TestRunner      // MFC方式的TestRunner 

下面是個(gè)文本方式 TestRunner 的例子:

    CppUnit::TextUi::TestRunner runner; 
    CppUnit::TestSuite *suite= new CppUnit::TestSuite(); 
     
    // 添加一個(gè)測(cè)試用例 
    suite->addTest(new CppUnit::TestCaller<MathTest> ( 
                  "testAdd", testAdd)); 
     
    // 指定運(yùn)行TestSuite  
    runner.addTest( suite ); 
    // 開(kāi)始運(yùn)行, 自動(dòng)顯示測(cè)試進(jìn)度和測(cè)試結(jié)果 
    runner.run( "", true );    // Run all tests and wait 

對(duì)測(cè)試結(jié)果的管理、顯示等功能涉及到另一類對(duì)象,主要用于內(nèi)部對(duì)測(cè)試結(jié)果、進(jìn)度的管理,以及進(jìn)度和結(jié)果的顯示。這里不做介紹。

下面我們整理一下思路,結(jié)合一個(gè)簡(jiǎn)單的例子,把上面說(shuō)的思路串在一起。

3. 手動(dòng)使用步驟

首先要明確測(cè)試的對(duì)象 fixture,然后根據(jù)其功能、流程,以及以前的經(jīng)驗(yàn),確定測(cè)試用例。這個(gè)步驟非常重要,直接關(guān)系到測(cè)試的終效果。當(dāng)然增加測(cè)試用例的過(guò)程是個(gè)階段性的工作,開(kāi)始完成代碼后,先完成對(duì)功能的測(cè)試用例,保證其完成功能;然后對(duì)可能出錯(cuò)的部分,結(jié)合以前的經(jīng)驗(yàn)(比如邊界值測(cè)試、路徑覆蓋測(cè)試等)編寫測(cè)試用例;后在發(fā)現(xiàn)相關(guān) bug 時(shí),根據(jù) bug 完成測(cè)試用例。

比如對(duì)整數(shù)加法進(jìn)行測(cè)試,首先定義一個(gè)新的 TestFixture 子類,MathTest,編寫測(cè)試用例的測(cè)試代碼。后期需要添加新的測(cè)試用例時(shí)只需要添加新的測(cè)試函數(shù),根據(jù)需要修改 setUp 和 tearDown 即可。如果需要對(duì)新的 fixture 進(jìn)行測(cè)試,定義新的 TestFixture 子類即可。注:下面代碼僅用來(lái)表示原理,不能編譯。

上一頁(yè)1234下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd