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做到这一点吗?
是否有另一个单元测试框架可以使我做到这一点?
我不知道是否有办法使用我不熟悉的 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)
另请查看更多断言