7

私はいくつかの C++ テスト駆動開発を行っています。私は同じことをする一連のクラスを持っています。

同じ入力から同じ出力が得られます (または、そうすべきです)。Visual Studio 2012 を使用しています

CppUnitTestFramework. テンプレート化されたテスト クラスを作成したかったので、一度テストを記述し、必要に応じてクラスでテンプレート化できますが、これを行う方法が見つかりません。私の目的:

/* two classes that do the same thing */
class Class1
{
    int method()
    {
        return 1;
    }
};

class Class2
{
    int method()
    {
        return 1;
    }
};

/* one set of tests for all classes */
template< class T>
TEST_CLASS(BaseTestClass)
{
    TEST_METHOD(testMethod)
    {
        T obj;

        Assert::AreEqual( 1, obj.method());
    }
};

/* only have to write small amout to test new class */
class TestClass1 : BaseTestClass<Class1>
{
};

class TestClass2 : BaseTestClass<Class1>
{
};

CppUnitTestFramework を使用してこれを行う方法はありますか?

これを可能にする別の単体テスト フレームワークはありますか?

4

2 に答える 2

3

私が慣れていないCppUnitTestFrameworkでこれを行う方法があるかどうかはわかりませんが、googletestで確実にできることは 、クラスの任意のリストを指定し、フレームワークに(テンプレートごとに)同じテストを生成させることです( s) それらすべてに対して。それはあなたの法案に合うと思います。

ここからgoogletest をソースとしてダウンロードできます。

必要なイディオムは次のとおりです。

typedef ::testing::Types</* List of types to test */> MyTypes;
...
TYPED_TEST_CASE(FooTest, MyTypes);
...
TYPED_TEST(FooTest, DoesBlah) {
    /*  Here TypeParam is instantiated for each of the types
        in MyTypes. If there are N types you get N tests.
    */
    // ...test code
}

TYPED_TEST(FooTest, DoesSomethingElse) {
    // ...test code
}

プライマーサンプルを調べます。次に、型付きテストのAdvancedGuide に移動します。

その他のアサーションもチェックしてください

于 2013-07-03T08:25:28.950 に答える