Я взял на себя некоторый код BOOST TEST, который был написан в качестве статической тестовой установки для тестирования медиа-файлов. Однако требуется, чтобы настройка теста была динамичной, поскольку число тестируемых мультимедийных файлов может меняться со временем, то есть в один день может быть 3 файла, а на следующий день может быть протестировано 15 файлов.
Текущая настройка использует несколько BOOST_AUTO_TEST_SUITE для построения статической древовидной структуры, и моя проблема заключается в том, что, когда я подхожу к точке в дереве тестов, где я хотел бы добавить 2 test_suite’s TestSuiteD1 и TestSuiteD2 в тестовое дерево, чтобы запустить мой динамические тесты, я могу только добавить 2 test_case в этом месте, и поэтому не могу добавить еще test_case (TestCase1 — TestCase3) ниже этого элемента дерева. Я искал в Интернете версию :: make_test_suite, приведенную ниже :: make_test_case, но безуспешно:
статическое повышение :: 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;
}
Других решений пока нет …