2013-02-05 39 views
26

मैंने हाल ही में परीक्षण के तहत एक सम्मानजनक और बड़ी (> 1 मिलियन लाइन) कार्यक्रम डालने की कोशिश शुरू कर दी है। वर्तमान में कोई यूनिट परीक्षण नहीं है। साथ ही, कार्यक्रम को प्रत्येक व्यक्तिगत फ़ाइल को एकसाथ लिंक करने के रूप में जोड़ा जाता है - कोई घटक पुस्तकालय नहीं होते हैं। इसके अलावा, वस्तुओं अत्यधिक परस्पर निर्भर हैं, और उनमें से कम से कम आधा लिंक किए बिना किसी ऑब्जेक्ट फ़ाइलों से लिंक करना मुश्किल (असंभव?) है।क्या मैं एकाधिक बुस्ट यूनिट परीक्षणों को एक परीक्षण बाइनरी में जोड़ सकता हूं?

हाँ, मुझे पता है, मेरा जीवन बेकार है।

मैं कुछ रिफैक्टरिंग (जाहिर है) करना चाहता हूं, लेकिन मैं चीजों को चारों ओर स्थानांतरित करने से पहले कुछ परीक्षण करना चाहता हूं। मेरा वर्तमान विचार एक "परीक्षण कार्यक्रम" संकलित करना है जो मेरे द्वारा बनाए गए सभी परीक्षण चलाता है। यह मेरे पास जोड़ने वाले मुद्दों को काफी सरल बना देगा और मुझे वास्तविक समस्याओं पर ध्यान केंद्रित करने देगा। तो मेरे पास दो प्रश्न हैं:

  • क्या एकाधिक बूस्ट यूनिट परीक्षण फ़ाइलों को एक परीक्षण निष्पादन योग्य में जोड़ना संभव है?
  • क्या कोई बेहतर समाधान है?
+0

ऐसा लगता है कि ऐसा करने का कोई तरीका हो सकता है। अपडेट बाद में। – dbn

उत्तर

31

मुझे लगता है, इस ठीक कैसे बढ़ावा परीक्षण का प्रयोग है। मैं सचमुच 2 लाइनों से मिलकर एक लघु main.cpp फ़ाइल रखना होगा:

#define BOOST_TEST_MODULE "C++ Unit Tests for MyTangledLibrary" 
#include <boost/test/included/unit_test.hpp> 

और फिर मैं परीक्षण मॉड्यूल * सीपीपी संकलित फ़ाइलें एक निष्पादन में एक साथ जोड़ने रखेंगे

#include <boost/test/unit_test.hpp> 
<< your include files >> 

BOOST_AUTO_TEST_SUITE(FancyShmancyLogic) 

BOOST_AUTO_TEST_CASE(TestingIf2x3equals6) 
{ 
    ... 
} 

BOOST_AUTO_TEST_CASE(TestingIf2x2equals4) 
{ 
    ... 
} 

BOOST_AUTO_TEST_SUITE_END() 

हाँ, आप उस मुख्य.cpp और आपके सभी मॉड्यूल को एक बड़े निष्पादन योग्य में संकलित करने में सक्षम होंगे।

+1

जब मैं यह कोशिश, परीक्षण संकलित और लिंक है, लेकिन निष्पादन पर मैं: स्थापना परीक्षण त्रुटि: परीक्षण पेड़ खाली –

+2

तुम भी main.cpp में आपके सभी मॉड्यूल * सीपीपी फ़ाइलों को शामिल करने की जरूरत है। अन्यथा परीक्षण धावक आपके परीक्षणों के बारे में नहीं जानता है। – Ace7k3

+1

@ एसी 7 के 3, मैंने सोचा कि यह '.cpp' फ़ाइल 'शामिल करने के लिए खराब प्रथा थी। क्या यह एक अपवाद है? – tjwrona1992

0

एक वैकल्पिक दृष्टिकोण http://neyasystems.com/an-engineers-guide-to-unit-testing-cmake-and-boost-unit-tests/ से मिलता है, जहां आप एक फ़ाइल नहीं बना रहे हैं, लेकिन फिर भी cmake फ़ाइल में enable_testing() आपको अपने जेनरेटर के साथ एक साथ सभी परीक्षणों को कॉल करने की अनुमति देता है। यदि आपका जनरेटर बना है, तो यह सिर्फ परीक्षण कर रहा है।