2012-09-10 86 views
2

我已经接管了一些BOOST TEST代码,该代码已被写为用于测试媒体文件的静态测试设置。但是,要求使测试设置动态,因为要测试的媒体文件的数量可以随时间变化,即一天可能有3个文件,并且第二天可能有15个要测试的文件。在BOOST TEST中添加测试套件而不是测试用例

当前的安装程序使用了一些BOOST_AUTO_TEST_SUITE来构建静态树结构,而我的问题是,当我到了测试树中的位置时,我想将test_suite的TestSuiteD1和TestSuiteD2添加到测试树中为了运行我的动态测试,我只能在该位置添加2个test_case,因此无法在此树元素下添加更多的test_case(TestCase1 - TestCase3)。我一直在互联网上寻找一个:: make_test_suite版本,下面:: make_test_case的,但没有运气:

静态的boost :: unit_test :: ut_detail :: auto_test_unit_registrar TestSuiteD1_registrar0 (升压:: unit_test :: make_test_case (& fTestSuiteD1_invoker,“TestSuiteD1”), boost :: unit_test :: ut_detail :: auto_tc_exp_fail :: instance() - > value());

我加入了下面的一些示例代码来展示一下我想这样做,并能得到一些反馈,如果它是可以添加的,而不是一个test_case一个test_suite:

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() 

回答

0

我不知道,如果灯具是正确的选择。看看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; 
} 
相关问题