2013-01-07 15 views
7

मुझे एक बूस्ट टेस्ट केस मिला है। इस परीक्षण मामले की अधिकांश पंक्तियों को पैरामीटर के बावजूद निष्पादित किया जाता है। लेकिन ऐसे हिस्सों हैं जो प्रदत्त पैरामीटर के आधार पर निष्पादित किए जाते हैं। मैं दो अलग-अलग परीक्षण मामलों को लिखने से बचना चाहता हूं जो कुछ मामूली हिस्सों को छोड़कर लगभग समान हैं। इसलिए मैं पैरामिट्रीकृत परीक्षण मामलों बनाने के लिए निम्नलिखित दृष्टिकोण की तरह कुछ का उपयोग करने की आवश्यकता है:बूस्ट टेस्ट: पैरामीटरयुक्त परीक्षण केस कैसे लिखें

BOOST_FIXTURE_TEST_CASE(caseA, Fixture) 
{ 
    TestFunction("parameterA"); 
} 

BOOST_FIXTURE_TEST_CASE(caseB, Fixture) 
{ 
    TestFunction("parameterB"); 
} 

void TestFunction(string param) 
{ 
    // ... 
    // lots of common checks regardless of parameters 
    // ... 
    if(param == "parameterA") 
     BOOST_CHECK(...); 
    else if(param == "parameterB") 
     BOOST_CHECK(...); 
} 

वहाँ एक और अधिक सुविधाजनक तरीके से अपने लक्ष्य को प्राप्त करने के लिए किसी भी अन्य रास्ता नहीं है? मुझे BOOST_PARAM_CLASS_TEST_CASE मैक्रो मिल सकता है लेकिन मुझे यकीन नहीं है कि यह इस मामले में प्रासंगिक है या नहीं।

+1

[इस उत्तर] (http://stackoverflow.com/ए/8110228/12520 9 1) आपके लिए उपयोगी हो सकता है (मैंने कोड का परीक्षण नहीं किया है)। –

+0

संभावित डुप्लिकेट [क्या बूस्ट :: परीक्षण पर स्वचालित पंजीकरण के साथ बूस्ट \ _PARAM \ _TEST \ _CASE का उपयोग करना संभव है?] (Http://stackoverflow.com/questions/8084038/is-it-possible-to-use- बढ़ावा-परम-परीक्षण केस-साथ स्वचालित पंजीयन-ऑन-बढ़ावा) –

उत्तर

1

नहीं बूस्ट समर्थन AFAIK, तो मैं ऐसा करते हैं:

void test_function(parameters...) 
{ 
    <test code> 
} 

BOOST_AUTO_TEST_CASE(test01) { 
    test_function(parameters for case #1) 
} 

BOOST_AUTO_TEST_CASE(test02) { 
    test_function(parameters for case #2) 
} 

आप टेम्पलेट के साथ यह कर सकते हैं यदि आप उन्हें पसंद:

template<int I, bool B> 
void test_function() 
{ 
    for(int i=0; i<I; i++) 
     if (B) BOOST_REQUIRE(i<10); 
} 

BOOST_AUTO_TEST_CASE(test01) { 
    test_function<10, true>(); 
} 

BOOST_AUTO_TEST_CASE(test02) { 
    test_function<20, false>(); 
} 
संबंधित मुद्दे