4

さて、私は基本的にボールを転がして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

1 に答える 1

4

CppUnit は、ユーザー インターフェイスの自動テストの作成にはあまり適していません。処理専用ユニット向けです。たとえば、 の代替を作成し、std::vectorそれが元の実装と同じように動作することを確認したいとします。独自の実装と標準の実装の両方に要素を追加するテストを作成し、さらに処理 (要素の削除、変更など) を行うことができます。 )、各ステップの後、2 つの結果が一致しているかどうかを確認します。

UI については、優れたオープン ソース/フリー ツールを認識していませんが、優れた商用ツールの 1 つはSmart Bear の TestCompleteなどです。

あなたが示した 2 番目の例では、最初に 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();
}
于 2011-11-17T15:40:56.387 に答える