使用模板测试类的C ++单元测试测试

Dan*_*n H 5 c++ templates unit-testing visual-c++ microsoft-cpp-unit-test

我正在做一些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>
{
};
Run Code Online (Sandbox Code Playgroud)

有什么办法可以使用CppUnitTestFramework做到这一点吗?

是否有另一个单元测试框架可以使我做到这一点?

Mik*_*han 4

我不知道是否有办法使用我不熟悉的 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
}
Run Code Online (Sandbox Code Playgroud)

研究引物样品。然后转到 类型测试高级指南

另请查看更多断言