2013-10-16 10 views
5

के साथ बूस्ट यूनिट परीक्षण दोहराएं मेरे पास दो कक्षाएं हैं जो सटीक समान API और कार्यक्षमता साझा करती हैं (वे समान कार्यक्षमता प्रदान करने के लिए अलग-अलग तृतीय-पक्ष API को लपेट रहे हैं)। दो वर्ग में एक सामान्य बेस-क्लास/इंटरफ़ेस नहीं है।विभिन्न वर्ग प्रकार

मेरे पास उनमें से एक के लिए एक बूस्ट यूनिट परीक्षण है और दूसरे पर एक ही सटीक परीक्षण चलाने की इच्छा है, लेकिन अभी मैं केवल यह जानता हूं कि परीक्षण को कॉपी-पेस्ट कैसे करें और कक्षा के नाम को ढूंढें/बदलें। साथ ही साथ दो स्थानों पर परीक्षणों को अद्यतन करने के लिए परेशान होने के साथ-साथ इसका मतलब यह भी है कि दो वर्गों का परीक्षण समान रूप से किया जा रहा है।

क्या कोई तरीका है कि मैं टेस्ट-केस 'टेम्प्लेट' कर सकता हूं? यदि नहीं, तो आप इसे कैसे हल करेंगे? सभी मैं अब तक के बारे में सोच सकते हैं (छद्म कोड बहाना) की तरह कुछ है:

template<class T> 
void runTests() 
{ 
T t; 
//do tests here 
} 

BOOST_AUTO_TEST_CASE(test_X) 
{ 
runTests<X>(); 
} 
BOOST_AUTO_TEST_CASE(test_Y) 
{ 
runTests<Y>(); 
} 

लेकिन मैं भले ही यह काम करेगा पता नहीं है।

उत्तर

8

यह बिल्कुल ठीक है, क्यों नहीं? हालांकि, वहाँ बढ़ावा में टेम्पलेट परीक्षण मामला है

http://www.boost.org/doc/libs/1_54_0/libs/test/doc/html/utf/user-guide/test-organization/auto-test-case-template.html

तो, कुछ इस तरह

typedef boost::mpl::vector<X, Y> XY_types; 
BOOST_AUTO_TEST_CASE_TEMPLATE(test_X_or_Y, T, XY_types) 

मदद कर सकते हैं और परीक्षण दो बार बुलाया जाएगा, एक्स और वाई

के लिए दूसरे के लिए पहली बार
4

आपको Test case template पर देखना चाहिए क्योंकि वे विभिन्न डेटा प्रकारों का उपयोग करके परीक्षणों का एक ही सेट चलाने का एक तरीका प्रदान करते हैं।

BOOST_AUTO_TEST_CASE_TEMPLATE(my_test, T, test_types) 
{ 
    BOOST_CHECK(checkSomethingWithType(T)); 
} 

जहां tests_types प्रकार के एमपीएल सूची है::

typedef boost::mpl::list<X, Y> test_types; 

उन उदाहरण निकाला जाता है और से अनुकूलित कर रहे हैं मैं क्या समझ, ऑटो पंजीकरण मैक्रो का उपयोग कर से, आप एक टेस्ट केस टेम्पलेट प्रदान कर सकते हैं बूस्ट परीक्षण दस्तावेज।

संबंधित मुद्दे