2011-11-17 117 views
4

好吧,我基本上想要讓球滾動並寫一些CPPUnit測試,但我不知道如何去做。在這裏,我有一些代碼基本上獲得了一個指向相關按鈕組和位置參數的菜單按鈕的指針,我將如何去爲此創建一個測試?CPPUnit如何編寫測試?

CMenuButton* CMenuContainer::GetButton(const enumButtonGroup argGroup, const int32_t argPosition) 
{ 
    CMenuButton* pButton = NULL; 
    if (argGroup < MAX_GROUP_BUTTONS) 
    { 
     pButton = m_ButtonGroupList[argGroup].GetButton(argPosition); 
    } 
    return pButton; 

回覆@Fabio Ceconello,是否可以爲這樣的代碼設置一些測試?

unsigned long CCRC32::Reflect(unsigned long ulReflect, const char cChar) 
{ 
    unsigned long ulValue = 0; 

    // Swap bit 0 for bit 7, bit 1 For bit 6, etc.... 
    for(int iPos = 1; iPos < (cChar + 1); iPos++) 
    { 
     if(ulReflect & 1) 
     { 
      ulValue |= (1 << (cChar - iPos)); 
     } 
     ulReflect >>= 1; 
    } 

    return ulValue; 
} 

回答

4

CppUnit不太適合爲用戶界面創建自動化測試。它更適用於僅處理單元。例如,假設您創建了std::vector的替代品,並且希望確保它的行爲與原始行爲類似,那麼您可以編寫測試,以便爲您的標準實現添加元素,然後執行一些更多的處理(刪除,更改元素等),並在每一步後檢查兩者是否有一致的結果。

對於用戶界面,我並不瞭解優秀的開源/免費工具,但其中一個很好的商業工具是TestComplete from Smart Bear

對於第二個示例,首先要爲Reflect()方法定義一個有效性檢查。例如,您可以手動計算某些值的結果,以檢查每個值的返回值是否爲預期值。或者你可以使用已知完全正常工作的反函數。

假設第一個選項,你可以寫這樣的測試:

class CRC32Test : public CppUnit::TestCase 
{ 
    public: 
     CRC32Test(std::string name) : CppUnit::TestCase(name) {} 

    void runTest() 
    { 
     struct Sample {unsigned long ulReflect; char cChar; unsigned long result}; 
     static Sample samples[] = 
     { 
     // Put here the pre-calculated values 
     }; 

     int count = sizeof(samples)/sizeof(Sample); 
     for (int i = 0; i < count; ++i) 
      CPPUNIT_ASSERT(subject.Reflect(samples[i].ulReflect, samples[i].cChar) == samples[i].result); 
    } 

    private: 
     CRC32 subject; 
}; 

int main(void) 
{ 
    CppUnit::TextUi::TestRunner runner; 
    runner.addTest(new CppUnit::TestCaller<CRC32Test>("test CRC32", &CRC32::runTest)); 
    runner.run(); 
} 
+0

我已經回答了你,在我的主要問題添加一些代碼。 – bigbaz34

+0

感謝您的幫助。我是這些cppunit測試的完全新手,我如何才能真正實現它?包括陳述? #include cppunit.h什麼的? – bigbaz34

+0

是的,抱歉沒有提及它,我跳過了準備部分。 CPPUnit使用每個類一個頭的約定,並且頭名與相應的類相同。所以在上面的例子中你需要#include TestCase.h,TestRunner.h和TestCaller.h –