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();
        /* ... */
    }
    

Anmelden zum Antworten