2009-12-15 10 views
10

शायद मैं इस बारे में सही तरीके से सोच नहीं रहा हूं। मैं यूनिट परीक्षणों का उपयोग करके अपना दूसरा प्रोजेक्ट शुरू कर रहा हूं। इस परियोजना के लिए मैंने अपनी पहली परियोजना को अपनाया, मैं बूस्ट :: टेस्ट की कोशिश कर रहा हूं।इकाई निष्पादन योग्य परियोजना का परीक्षण

मेरा सवाल है, इकाई परीक्षण परियोजनाओं के लिए उचित प्रक्रियाएं क्या हैं जो निष्पादन योग्य में संकलित होती हैं? ऐसा लगता है कि पुस्तकालयों और निर्भरताओं के लिए मैं जो कुछ भी देखता हूं, वह ऐसा लगता है। मैं अपने exe परियोजना इकाई का परीक्षण किया जा करना चाहते हैं, लेकिन मैं इकाई परीक्षण कार्यों बाइनरी में चारों ओर चल का एक समूह नहीं करना चाहते, और न ही मैं

#ifdef _DEBUG 
    BOOST_AUTO_TEST_CASE(my_func) 
    { 
    } 
#endif 
मेरे सारे परीक्षण के आसपास

करना चाहते हैं।

मैं इकाई परीक्षण के लिए एक अलग परियोजना बनाने के बारे में सोचा था, लेकिन वास्तव में निष्पादन के लिए काम नहीं करता है .. जब तक कि मैं परीक्षण परियोजना में मेरे अन्य परियोजना से कुछ फैंसी पूर्व निर्माण आपरेशन नकल करना चाहते हैं ..

कोई विचार या विचार?

+0

आप शायद अपने प्रश्न गलतफहमी से बचने के लिए अद्यतन करना चाहिए - मैं नहीं है एकमात्र होना –

उत्तर

6

परियोजना को लाइब्रेरी के रूप में संकलित किया जा सकता है और यह पुस्तकालय दो अलग-अलग निष्पादन योग्यों में संभवतः स्थैतिक रूप से जुड़ा हुआ है: "प्रोजेक्ट", जिसे वितरित किया जाएगा, और यूनिट परीक्षण।

अब समस्या आपके आईडीई से उत्पन्न होती है, यह कौन सा है? क्या यह एक परियोजना के लिए दो द्विआधारी बनाने की अनुमति देता है?

+0

यह एक बहुत अच्छा विचार है – Charles

+0

मैं इस समाधान के साथ गया, लेकिन सुनिश्चित करें कि यदि आप ऐसा करते हैं तो आपका कंपाइलर लाइब्रेरी से सभी ऑब्जेक्ट्स को लिंक करना जानता है। विजुअल स्टूडियो में आप लिंकर विकल्पों में लाइब्रेरी निर्भरता इनपुट का उपयोग करते हैं, जीसीसी में मुझे लगता है कि विकल्प -z allextract है या कुछ – Charles

2

बहुत विचार एक अलग प्रोजेक्ट बनाने के लिए जहां अपेक्षित व्यवहार के लिए अलग इकाइयों का परीक्षण कोड की डिबग बना रहे हैं या नहीं की परवाह किए बिना (कुछ मुद्दों पर भी दिखाई नहीं डिबग कोड मतभेद के कारण बनाता है में है) है।
आप इसे बाइनरी के रूप में बनाते हैं और यह देखने के लिए दौड़ते हैं कि आपके परिवर्तन कुछ भी नहीं तोड़ते हैं - अक्सर इसे स्वचालित पोस्ट-बिल्ड एक्शन के रूप में भी सेट किया जाता है।

यदि आप बाहर से अपने आवेदन का परीक्षण करना चाहते हैं - तो संभवतः क्षेत्र/ढांचे/आदि के आधार पर आप कुछ परीक्षण ढांचे का उपयोग कर सकते हैं। आवेदन के ... लेकिन बूस्ट .स्ट और अन्य सभी यूनिट परीक्षण ढांचे निष्पादन योग्य परीक्षण के लिए नहीं हैं।

+0

त्वरित उत्तर के लिए धन्यवाद। मुझे पता है कि इकाई परीक्षण पुस्तकालयों के साथ आश्चर्यजनक रूप से काम करता है, लेकिन मैं इकाई को अपने निष्पादन योग्य परीक्षण करना चाहता हूं, इसलिए मुझे वास्तव में अपने मुख्य() फ़ंक्शन को परिभाषित करने की आवश्यकता है। कुछ जो मेरे यूनिट टेस्ट समाधान में कोई समस्या नहीं थी, लेकिन बूस्ट :: टेस्ट :( – Charles

+0

के साथ एक समस्या है जो न्यूनतम परीक्षण प्रदान करता है जो यूनिट परीक्षणों को परेशान करता है, परेशानी का बहुत अधिक नहीं होना चाहिए। हालांकि स्वचालित प्रारंभिकरण के लिए यहां देखें: http://www.boost.org/doc/libs/1_41_0/libs/test/doc/html/utf/user-guide/initialization.html#utf.user-guide.initialization.auto- जनरेशन –

+0

यदि यह मदद करता है, यहां उपयोगी उदाहरणों की तरह दिखते हैं: http://github.com/jsankey/boost.test-examples/ –

1

यूनिट-परीक्षण निष्पादन योग्य एक अच्छा विचार हो सकता है - लेकिन यह महसूस करें कि यह यूनिट-परीक्षण कोड की तुलना में एक अलग राक्षस है। एक बार आपके पास निष्पादन योग्य हो जाने के बाद, सी ++ या बूस्ट नहीं है। यह सिर्फ एक कार्यक्रम है।

इनपुट:: आप इसे चलाने के लिए और विश्लेषण/विभिन्न प्रक्रियाओं में अपने निवेशों को नियंत्रित सक्षम होना चाहिए

  • तर्क
  • stdin
  • वातावरण चर (शायद)
  • विन्यास फाइल (शायद)

आउटपुट:

  • वापसी मान
  • stdout
  • उत्पादन फ़ाइलें (शायद)

यह शायद एक खोल के अंदर इसे चलाने के लिए सबसे आसान होने जा रहा है। bash एक लिनक्स पर्यावरण में आश्चर्यजनक काम करेगा (फाइलों से/से पाइप, sed/awk/grep को सहीता का विश्लेषण करने के लिए आउटपुट पर चलाएं)। आप पर्ल या पायथन और अपने स्वयं के संबंधित यूनिट-परीक्षण ढांचे का उपयोग कर सकते हैं, जिसमें आपको किसी अन्य समारोह में अपने प्रोग्राम के आमंत्रण को लपेटना है: दोनों भाषाएं subprocess मॉड्यूल और पर्ल के साथ उपप्रकारों, पायथन से पाइप की धारणा का समर्थन करती हैं। इसकी मानक फ़ाइल-खोलने की व्यवस्था के साथ।

जो भी आप करते हैं, आप C++ से संपूर्ण निष्पादन योग्य इकाई परीक्षण करने का प्रयास करना चाहते हैं।

+0

कर सकूं, ठीक है, मेरा मतलब वास्तव में निर्मित निष्पादन योग्य परीक्षण का मतलब नहीं है, मेरा मतलब है कि मेरा प्रोजेक्ट एक exe के रूप में संकलित करता है, पुस्तकालय नहीं। अधिकांश इकाई परीक्षण ढांचे पुस्तकालयों के लिए डिजाइन किए जाते हैं, इसलिए भ्रम और प्रश्न। – Charles

6

मैं CppUnit का उपयोग एक अतिरिक्त परियोजना जो केवल * .obj निष्पादनयोग्य कोड से उत्पन्न फ़ाइलों के लिए लिंक के भीतर मेरी निष्पादनयोग्य परीक्षण करने के लिए। इस तरह आपके पास मूल कोड बेस में कोई परीक्षण तर्क नहीं है और आपके परीक्षणों के लिए एक अलग कंसोल या विंडोज एप्लिकेशन लिख सकता है।

चीयर्स होल्गर

+0

आप यूनिट टेस्ट प्रोजेक्ट में * .obj कैसे जोड़ते हैं? – NSA

+0

आप वांछित * .obj फ़ाइलों को लिंकर इनपुट फ़ाइलों में जोड़ सकते हैं जैसे कम से कम विजुअल स्टूडियो में। –

1

आप अपने इकाई परीक्षण परियोजना से आवश्यक .cpp फ़ाइल में शामिल हैं और यह परीक्षण कर सकते हैं।

के रूप में मैंने किया था:

टेस्ट \ GameServer \ PVESettingsTest.cpp:

#include "../../sources/GameServer/PVESettings.cpp" 

सभी ठीक काम करता है ...

+0

यह विधि संकलन समय को दोगुना करता है। आपके उदाहरण में 'PVESettings.cpp' दो बार संकलित किया गया है: मूल प्रोजेक्ट के लिए और यूनिट परीक्षण के लिए। यह छोटी परियोजनाओं के लिए महत्वहीन हो सकता है, लेकिन परियोजना बढ़ने के साथ ही दर्द हो जाएगा। –

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