Name von Testcase bei Boost::Test erhalten
-
Hi,
meine Testcases sehen bisher z. T. so aus:
BOOST_AUTO_TEST_CASE( Rearranger_move_nd_systematic ) { const string TEST_CASE_NAME = "Rearranger_move_nd_systematic"; ... }Weiss jemand, ob ich mir die Definition der String-Konstante irgendwie sparen kann, d. h. den Namen des Testcases z. B. über ein Makro erhalten?
-
Schau doch einfach was der Präprozessor ausspuckt, (Flag /E beim MSVC) wenn du nur einen einzelnen leeren BOOST_AUTO_TEST_CASE definierst. Dann weißt du wozu boos den Makro-Parameter verarbeitet.
-
pumuckl schrieb:
Schau doch einfach was der Präprozessor ausspuckt, (Flag /E beim MSVC) wenn du nur einen einzelnen leeren BOOST_AUTO_TEST_CASE definierst. Dann weißt du wozu boos den Makro-Parameter verarbeitet.
Ich habe den leeren Test-Case
BOOST_AUTO_TEST_CASE( Rearranger_branch_manual ) { }genommen und durch den Präprozessor geschickt. Dann bekomme ich
struct Rearranger_branch_manual : public BOOST_AUTO_TEST_CASE_FIXTURE { void test_method(); }; static void Rearranger_branch_manual_invoker() { Rearranger_branch_manual t; t.test_method(); } struct Rearranger_branch_manual_id {}; static boost::unit_test::ut_detail::auto_test_unit_registrar Rearranger_branch_manual_registrar12( boost::unit_test::make_test_case( &Rearranger_branch_manual_invoker, "Rearranger_branch_manual" ), boost::unit_test::ut_detail::auto_tc_exp_fail< Rearranger_branch_manual_id>::instance()->value() ); void Rearranger_branch_manual::test_method() {}als den Bereich, wo "Rearranger_branch_manual" im präprozessierten Code vorkommt.
Sehe ich das richtig, dass ich hieraus den Namen meines Testcases nicht rückgewinnen kann?
-
Vielleicht bietet BOOST_AUTO_TEST_CASE_FIXTURE als Basisklasse ja irgendwelche entsprechenden Funktionalitäten an.
Alternativ kannst du dir natürlich auch ein eigenes Makro schreiben, indem du BOOST_FIXTURE_TEST_CASE und BOOST_AUTO_TEST_CASE zusammenfasst und modifizierst:#define BOOST_NAMED_AUTO_TEST_CASE( test_name ) \ struct test_name : public BOOST_AUTO_TEST_CASE_FIXTURE \ { \ void test_method(); \ static char const* get_test_name() \ { return #test_name ; } \ }; \ \ static void BOOST_AUTO_TC_INVOKER( test_name )() \ { \ test_name t; \ t.test_method(); \ } \ \ struct BOOST_AUTO_TC_UNIQUE_ID( test_name ) {}; \ \ BOOST_AUTO_TU_REGISTRAR( test_name )( \ boost::unit_test::make_test_case( \ &BOOST_AUTO_TC_INVOKER( test_name ), #test_name ), \ boost::unit_test::ut_detail::auto_tc_exp_fail< \ BOOST_AUTO_TC_UNIQUE_ID( test_name )>::instance()->value() ); \ \ void test_name::test_method() \ /* ... */ BOOST_AUTO_TEST_CASE( Rearranger_move_nd_systematic ) { std::cout << get_test_name(); /* ... */ }