2010-11-16 11 views
7

पर यूनिट परीक्षण फ़ंक्शन लेखन कैसे करें, इन दिनों, मैं इकाई परीक्षण का अध्ययन कर रहा हूं। परीक्षण इकाई में अनुमानित मूल्य के रूप में लगभग इकाई परीक्षण उपयोग वापसी मूल्य या संदर्भ मान। यदि यह फ़ंक्शन में मान और संदर्भ मान वापस नहीं करता है। अपेक्षित मूल्य क्या है?स्टडआउट/std :: cout

exsample-

void unit_test() 
{ 
    cout << "Hello" << endl; 
} 

ज़रूर, unit_test समारोह बहुत सरल है। इसलिए, इस फ़ंक्शन को यूनिट परीक्षण की आवश्यकता नहीं लगती है। लेकिन, यह सिर्फ नमूना है। क्या आपको लगता है कि unit_test फ़ंक्शन का दुष्प्रभाव है।

धन्यवाद, सब कुछ और कृपया मेरी मूर्ख अंग्रेजी को समझें।

उत्तर

11

आप एक समारोह है कि आप जानते हैं लिख रहे हैं तो परीक्षण किया जाना चाहिए, टी मुर्गी आपको इसे अपने ढांचे में टेस्ट करने योग्य बनाना चाहिए। यहां, यदि आपका परीक्षण प्रक्रिया स्तर पर किया जाता है जहां आप प्रक्रिया आउटपुट को सत्यापित कर सकते हैं, तो std :: cout पर लिखना ठीक है।

std::ostringstream oss; 
unit_test(oss); 
assert(oss && oss.str() == "Hello"); 

इस मिसाल के रूप में, अच्छी तरह से परीक्षण किया सॉफ्टवेयर बनाने:

void unit_test(std::ostream& os = std::cout) 
{ 
    os << "Hello" << endl; 
} 

तो फिर तुम यह रूप में परीक्षण कर सकते हैं: अन्यथा, आप, उत्पादन समारोह के लिए एक पैरामीटर स्ट्रीम बनाने के लिए के रूप में चाहते हो सकता है कुछ देने और लेने की आवश्यकता है ... परीक्षण आवश्यकताओं डिजाइन में वापस फ़ीड।

संपादित करें: यदि आप उन्हें बदले बिना पूर्व मौजूदा कार्यों का परीक्षण करना चाहिए, फिर विचार करें:

#include <sstream> 
#include <iostream> 

void f() 
{ 
    std::cout << "hello world\n"; 
} 

int main() 
{ 
    std::ostringstream oss; 
    std::streambuf* p_cout_streambuf = std::cout.rdbuf(); 
    std::cout.rdbuf(oss.rdbuf()); 

    f(); 

    std::cout.rdbuf(p_cout_streambuf); // restore 

    // test your oss content... 
    assert(oss && oss.str() == "hello world\n"; 
    std::cout << oss.str(); 
} 
+0

कैसे जोर दें (oss && oss.str() == "हैलो")? – Chubsdad

+0

मैं आपकी राय से सहमत हूं। आपने टीडीडी कहा, ठीक है? लेकिन, मैंने यूनिट परीक्षण शुरू किया। और हमारे कार्यक्रम alreay विकास समाप्त हो गया। दुर्भाग्य से हमारे कार्यक्रम टीडीडी नहीं था।इसलिए, इकाई परीक्षण करना मुश्किल है क्योंकि हमारे कार्यक्रम ने डिजाइन स्तर पर इकाई परीक्षण पर विचार नहीं किया था। यह समस्या मेरे सिर पर हमला !!!! ; (वैसे भी, आपके उत्तर के लिए धन्यवाद! – cardbt

+0

@Chubsdad: उचित कॉल, धन्यवाद :-)। अपडेट करूंगी। –

0

यूनिट एक ऐसे फ़ंक्शन का परीक्षण करता है जो void लौटाता है, आमतौर पर इसमें इनपुट भेजना और खराब डेटा पारित होने पर फ़ंक्शन फेंकने वाले किसी भी अपवाद को पकड़ना शामिल है। आपका फ़ंक्शन कोई इनपुट नहीं लेता है, इसलिए यूनिट परीक्षण यह अनावश्यक लगता है जब तक कि आप फ़ंक्शन को कॉल करते समय स्मृति से बाहर चलने जैसी चरम स्थितियों का परीक्षण नहीं करना चाहते।

+0

अपने जवाब के लिए धन्यवाद। एक अच्छा दिन है ~ – cardbt

0

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

यही है, आप साइड इफेक्ट्स का परीक्षण करते हैं - आपके द्वारा प्रदान किए गए फ़ंक्शन का एकमात्र दुष्प्रभाव यह है कि वर्ण कंसोल पर आउटपुट होते हैं, शायद कुछ शायद ही कभी परीक्षण किया जाता है।

इस प्राइमर पर एक नज़र डालें:

या इस एक:

+0

आपका स्वागत है, मदद करने में खुशी हुई! –

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