Is it possible to use BOOST_PARAM_TEST_CASE with automatic registration on boost::test?

前端 未结 6 832
名媛妹妹
名媛妹妹 2021-02-14 03:50

Is it possible to mix up the BOOST_AUTO_TEST_CASE and BOOST_AUTO_TEST_CASE_TEMPLATE macros with the BOOST_PARAM_TEST_CASE in any way? I\'m

6条回答
  •  情深已故
    2021-02-14 04:39

    I wrote my own support for this since there really didn't seem to be any good support. This requires the C++11 decltype feature and the ::std::remove_const and ::std::remove_reference library methods to work.

    The macro definitions are a modified versions of the BOOST_FIXTURE_TEST_CASE and BOOST_AUTO_TEST_CASE macros.

    You use this by declaring your function thus:

    BOOST_AUTO_PARAM_TEST_CASE(name, begin, end)
    {
        BOOST_CHECK_LT(param, 5);  // The function will have an argument named 'param'.
    }
    

    Here is the header that defines the BOOST_AUTO_PARAM_TEST_CASE macro:

    #include 
    #include 
    #include 
    
    #define BOOST_FIXTURE_PARAM_TEST_CASE( test_name, F, mbegin, mend )     \
    struct test_name : public F {                                           \
       typedef ::std::remove_const< ::std::remove_reference< decltype(*(mbegin)) >::type>::type param_t; \
       void test_method(const param_t &);                                   \
    };                                                                      \
                                                                            \
    void BOOST_AUTO_TC_INVOKER( test_name )(const test_name::param_t ¶m) \
    {                                                                       \
        test_name t;                                                        \
        t.test_method(param);                                               \
    }                                                                       \
                                                                            \
    BOOST_AUTO_TU_REGISTRAR( test_name )(                                   \
        boost::unit_test::make_test_case(                                   \
           &BOOST_AUTO_TC_INVOKER( test_name ), #test_name,                 \
           (mbegin), (mend)));                                              \
                                                                            \
    void test_name::test_method(const param_t ¶m)                       \
    
    // *******
    
    #define BOOST_AUTO_PARAM_TEST_CASE( test_name, mbegin, mend )           \
       BOOST_FIXTURE_PARAM_TEST_CASE( test_name,                            \
                                      BOOST_AUTO_TEST_CASE_FIXTURE,         \
                                      mbegin, mend)
    

提交回复
热议问题