2012-09-10 6 views
2

미디어 파일 테스트를위한 정적 테스트 설정으로 작성된 BOOST TEST 코드를 일부 사용했습니다. 그러나 테스트 할 미디어 파일 수가 시간에 따라 달라질 수 있으므로 테스트 설정을 동적으로 만드는 것이 필요합니다. 즉 하루에 3 개의 파일이 있고 그 다음날 테스트 할 파일이 15 개가 될 수 있습니다.BOOST 테스트에서 테스트 케이스 대신 테스트 스위트 추가

정적 트리 구조를 빌드하기 위해 현재 설정에서 BOOST_AUTO_TEST_SUITE를 사용합니다. 테스트 트리에서 2 개의 test_suite의 TestSuiteD1 및 TestSuiteD2를 테스트 트리의 지점에 추가 할 때 문제가 발생합니다. 내 동적 테스트를 실행하려면이 위치에 2 개의 test_case 만 추가 할 수 있으므로이 트리 요소 아래에 test_case (TestCase1 - TestCase3)를 추가 할 수 없습니다. 나는 아래의 :: make_test_case으로하는 :: make_test_suite 버전의 인터넷을 검색하지만, 한 행운과 :

정적 부스트 :: 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; 
}