如何在Boost测试框架中重用测试用例

How to reuse test case in Boost test framework?

本文关键字:测试用例 框架 测试 Boost      更新时间:2023-10-16

例如,我有以下测试用例:

#include <MyClass.hpp>
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE( my_test )
{
    MyClass o1(42), o2(21);
    BOOST_CHECK( o1.is_valid() );
    BOOST_CHECK_EQUAL( o1 == o2 * 2 );
    BOOST_CHECK_EQUAL ...
    ...
}

有几个类似的类实现了相同的方法,希望通过相同的逻辑对它们进行测试,测试用例可能如下:

BOOST_AUTO_TEST_CASE( my_test1 )
{
    MyClass1 o1(42), o2(21);
    BOOST_CHECK( o1.is_valid() );
    BOOST_CHECK_EQUAL( o1 == o2 * 2 );
    BOOST_CHECK_EQUAL ...
    ...
}
BOOST_AUTO_TEST_CASE( my_test2 )
{
    MyClass2 o1(42), o2(21);
    BOOST_CHECK( o1.is_valid() );
    BOOST_CHECK_EQUAL( o1 == o2 * 2 );
    BOOST_CHECK_EQUAL ...
    ...
}
BOOST_AUTO_TEST_CASE( my_test3 )
{
    MyClass3 o1(42), o2(21);
    BOOST_CHECK( o1.is_valid() );
    BOOST_CHECK_EQUAL( o1 == o2 * 2 );
    BOOST_CHECK_EQUAL ...
    ...
}
...

有没有一种方法可以在测试用例中重用逻辑?

查看模板测试用例。

#include <MyClass.hpp>    
#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp>
#include <boost/mpl/list.hpp>
typedef boost::mpl::list<MyClass1,MyClass2,MyClass3> test_types;
BOOST_AUTO_TEST_CASE_TEMPLATE( my_test, T, test_types )
{
    T o1(42), o2(21);
    BOOST_CHECK( o1.is_valid() );
    BOOST_CHECK_EQUAL( o1 == o2 * 2 );
    BOOST_CHECK_EQUAL ...
    ...
}