c++ - 在 BOOST TEST 中添加测试套件而不是测试用例

标签 c++ testing boost boost-test

我接管了一些 BOOST 测试代码,这些代码被编写为用于测试媒体文件的静态测试设置。然而,要求是使测试设置动态,因为要测试的媒体文件的数量会随时间变化,即一天可能有 3 个文件,第二天可能有 15 个文件要测试。

当前设置使用多个 BOOST_AUTO_TEST_SUITE 来构建静态树结构,我的问题是当我到达测试树中的那个点时,我想按顺序将 2 个测试套件的 TestSuiteD1 和 TestSuiteD2 添加到测试树要运行我的动态测试,我只能在该位置添加 2 个 test_case,因此无法在此树元素下方添加更多的 test_case (TestCase1 - TestCase3)。我一直在互联网上搜索以下::make_test_case 的::make_test_suite 版本,但没有成功:

static boost::unit_test::ut_detail::auto_test_unit_registrar TestSuiteD1_registrar0 ( boost::unit_test::make_test_case(&fTestSuiteD1_invoker , "TestSuiteD1"), boost::unit_test::ut_detail::auto_tc_exp_fail::instance()->value() );

我在下面添加了一些示例代码来展示我想做什么,如果可以添加 test_suite 而不是 test_case 的话,我会得到一些反馈:

class MyTestSuite : public TestFixture1 {
    public:
    static void TestCase1() { //Some test };
    static void TestCase2() { //Some test };
    static void TestCase3() { //Some test };

    test_suite* TestThis(string a, string b, string d)
        test_suite* tsE = BOOST_TEST_SUITE( "TestSuiteE" );
        tsE->add( BOOST_TEST_CASE( &TestCase1 ) );
        tsE->add( BOOST_TEST_CASE( &TestCase2 ) );
        tsE->add( BOOST_TEST_CASE( &TestCase3 ) );
    };
};

BOOST_AUTO_TEST_SUITE( TestSuiteA );
BOOST_FIXTURE_TEST_SUITE( TestSuiteB , TestFixture1 );
BOOST_AUTO_TEST_SUITE( TestSuiteC );
BOOST_AUTO_TEST_SUITE( TestSuiteD );

    static test_unit* TestSuiteD1_invoker (void) { 
        MyTestSuite MyTS;
        MyTS.TestThis("a" , "b" , "D1" );
        return 0;
    }
    struct TestSuiteD1_id {};

    static boost::unit_test::ut_detail::auto_test_unit_registrar
      TestSuiteD1_registrar0 ( boost::unit_test
      ::make_test_case(&fTestSuiteD1_invoker , "TestSuiteD1" ),
      boost::unit_test::ut_detail::auto_tc_exp_fail<TestSuiteD1_id
      >::instance()->value() ); 

    static test_unit* TestSuiteD2_invoker (void) { 
        MyTestSuite MyTS;
        MyTS.TestThis("a" , "b" , "D2" );
        return 0;
    }
    struct TestSuiteD2_id {};

    static boost::unit_test::ut_detail::auto_test_unit_registrar TestSuiteD2_registrar0
      ( boost::unit_test::make_test_case(&fTestSuiteD2_invoker , "TestSuiteD2" ),
      boost::unit_test::ut_detail::auto_tc_exp_fail<TestSuiteD2_id
      >::instance()->value() ); 

BOOST_AUTO_TEST_SUITE_END() 
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE_END()

最佳答案

我不确定固定装置是否是正确的方法。看看BOOST_TEST_CASE_TEMPLATE

BOOST_TEST_CASE_TEMPLATE_FUNCTION( my_test, T )
{
    BOOST_CHECK_EQUAL( sizeof(T), 4 );
}

test_suite*
init_unit_test_suite( int argc, char* argv[] )
{
    typedef boost::mpl::list<int,long,unsigned char> test_types;

    framework::master_test_suite().
        add( BOOST_TEST_CASE_TEMPLATE( my_test, test_types ) );

    return 0;
}

关于c++ - 在 BOOST TEST 中添加测试套件而不是测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12351810/

相关文章:

firefox - 单个站点上有多个不同的 session

c++ - 在 Rcpp 中将 boost::array 转换为 NumericVector

c++ - 计算直线交点 C++ 的最常用方法?

c++ - 在 OpenCV 中编译警告并且没有输出

c++ - 在析构函数中删除的问题

macos - OSX - 如何调试分布式构建?

c++ - 使用 CMake 添加 Boost.Log 以 boost 库

c++ - CLOCKS_PER_SEC 与 std::clock() 的结果不匹配

c++ - map<string, string> 如何在这个 map 中插入数据?

xml - 如何从 XSD 模式生成一组测试 XML 数据文件?