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)
但我甚至不知道这是否有效.
这完全没问题,为什么不呢?但是,在boost中有模板测试用例
所以,这样的事情可以帮助你
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.
您应该查看测试用例模板,因为它们提供了一种使用不同数据类型运行相同测试集的方法。据我了解,使用自动注册宏,您可以提供一个测试用例模板:
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 测试文档中提取和改编的。
| 归档时间: |
|
| 查看次数: |
1210 次 |
| 最近记录: |