簡體   English   中英

CPPUnit我該怎么寫測試?

[英]CPPUnit how do I write a test?

好吧,我基本上想讓球滾動並寫一些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;
}

CppUnit不適合為用戶界面創建自動化測試。 對於僅處理單元而言更是如此。 例如,假設您創建了std::vector的替換,並希望確保它的行為與原始行為相似,您可以編寫將元素添加到您的和標准實現的測試,然后再做一些處理(刪除,更改)元素等)並在每個步驟之后檢查兩者是否具有一致的結果。

對於UI,我不了解良好的開源/免費工具,但一個很好的商業工具是來自Smart Bear的TestComplete等。

對於您給出的第二個示例,首先要定義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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM