重复具有不同类类型的Boost单元测试

Mr.*_*Boy 5 c++ boost unit-testing boost-test

我有两个类共享完全相同的API和功能(它们包含不同的第三方API以提供相同的功能).这两个类没有共同的基类/接口.

我对其中一个进行了升压单元测试,并希望在另一个上运行相同的精确测试,但是现在我只知道如何复制粘贴测试并查找/替换类名.除了烦恼不得不在两个地方更新测试之外,这也意味着无法保证两个类的测试完全相同.

有没有办法可以"模板化"测试用例?如果没有,你会如何解决这个问题?到目前为止,我所能想到的就是(借用伪代码):

template<class T>
void runTests()
{
 T t;
 //do tests here
}

BOOST_AUTO_TEST_CASE(test_X)
{
 runTests<X>();
}
BOOST_AUTO_TEST_CASE(test_Y)
{
 runTests<Y>();
}
Run Code Online (Sandbox Code Playgroud)

但我甚至不知道这是否有效.

For*_*veR 8

这完全没问题,为什么不呢?但是,在boost中有模板测试用例

http://www.boost.org/doc/libs/1_54_0/libs/test/doc/html/utf/user-guide/test-organization/auto-test-case-template.html

所以,这样的事情可以帮助你

typedef boost::mpl::vector<X, Y> XY_types;
BOOST_AUTO_TEST_CASE_TEMPLATE(test_X_or_Y, T, XY_types)
Run Code Online (Sandbox Code Playgroud)

测试将被调用两次,首先是X,第二次是Y.


Loh*_*run 5

您应该查看测试用例模板,因为它们提供了一种使用不同数据类型运行相同测试集的方法。据我了解,使用自动注册宏,您可以提供一个测试用例模板:

BOOST_AUTO_TEST_CASE_TEMPLATE(my_test, T, test_types)
{
    BOOST_CHECK(checkSomethingWithType(T));
}
Run Code Online (Sandbox Code Playgroud)

哪里tests_types是 MPL 类型列表:

typedef boost::mpl::list<X, Y> test_types;
Run Code Online (Sandbox Code Playgroud)

这些示例是从 Boost 测试文档中提取和改编的。