2011-11-17 31 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の交換を作成したと言うと、それは、あなたが両方あなたの標準実装に要素を追加テストを書くことができ、元の1のように振る舞いを確認するに聞かせ、その後、いくつかのより多くの取り扱い(など、要素の変更、削除を行います。)そして各ステップの後に、2人が一貫した結果を有するかどうかをチェックする。 UIについては

私は、優れたオープンソース/無料ツールを認識してないんだけど、一つの良い商用ツールは、とりわけ、TestComplete from Smart Bearです。あなたが与えた第二の例については

、最初は反映()メソッドの妥当性チェックを定義することです。たとえば、いくつかの値の結果を手で計算して、それぞれの戻り値が期待どおりであるかどうかを確認することができます。あるいは、完全に機能することが知られている逆関数を使用することもできます。私はあなたに答え、私のメインの質問にいくつかのコードを追加した

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はクラスごとに1つのヘッダーの規則を使用し、ヘッダー名は対応するクラスと同じです。ですから、例えばであなたがTestCase.h、TestRunner.hとTestCaller.h –

関連する問題