2009-07-01 14 views
16

सी/सी ++ का उपयोग करते समय मैं कोई टेस्ट क्लास नहीं करता हूं (लेकिन इसके बजाय प्रिंट विधियों के का उपयोग करते समय दीवार पर अपना सिर मार रहा है)।सी/सी ++ परीक्षण ढांचे (जावा के लिए जुनीट की तरह)

सी/सी ++ कोड में परीक्षण करने के लिए सबसे अधिक उपयोग की जाने वाली विधि क्या है? जावा की जुनीट ने मुझे चीजों को डीबग करते समय केवल अच्छी यादों के साथ छोड़ दिया है।

मुझे पता है कि परिभाषित डीबग हेडर के साथ कोड में आवेषण का उपयोग करना चाहिए, लेकिन क्या कोई बेहतर तरीका नहीं है?

और चूंकि मेरे पास भविष्य में परीक्षण कक्षाएं बनाने का इरादा है, तो किसी भी उपयोगी सुझाव का स्वागत है।

उत्तर

8
+0

खेलों से पहले लिंक के लिए मुझे अलग-अलग ढांचे (कम से कम अब के लिए) के बारे में जानने की ज़रूरत है। धन्यवाद। – Milan

+1

ध्यान रखें कि gamesfromwithin.com आलेख, हालांकि उत्कृष्ट, 2004 में लिखा गया था, और तब से चीजें बदल गई हैं। –

+1

यूनिटटेस्ट ++ के लिए github.com/unittest-cpp/unittest-cpp पर जाएं। बाकी सब कुछ पुराना है। – Markus

14

हम Google Test का उपयोग करते हैं और यह साथी Google Mock है। आश्चर्यजनक रूप से काम करता है और क्रूज़ कंट्रोल आदि के साथ आसान एकीकरण के लिए जुनीट स्टाइल एक्सएमएल आउटपुट का समर्थन करता है। यह कुछ महीनों पहले भी पूरी तरह से क्रॉस प्लेटफॉर्म है, और मेरे शोध से जीएमॉक केवल सी ++ के लिए पूरी तरह से क्रॉस प्लेटफार्म ऑब्जेक्ट मॉकिंग फ्रेमवर्क था।

3

UnitTest++ एक नज़र लायक है। यहां उल्लिखित कुछ अन्य ढांचे की तुलना में सुविधाओं की कमी है, लेकिन सादगी अच्छी है - खासकर यदि आप अभी शुरू कर रहे हैं।

मेरा मानना ​​है कि इसे http://gamesfromwithin.com/?p=29 में उल्लिखित लेख लिखने के बाद नोएल लोपिस द्वारा विकसित किया गया था। विभिन्न कंपेलरों/प्लेटफार्मों की एक भीड़ के लिए बंदरगाह करना बहुत आसान है - यदि पीसी के अलावा किसी अन्य चीज़ को लक्षित करने की आवश्यकता हो तो उपयोगी हो, चाहे वह गेम कंसोल, एम्बेडेड डिवाइस हो या अन्यथा हो।

मेलिंग सूची कुछ समय से चुप रही है, लेकिन हर बार अक्सर सवाल, पैच, और/या एक नई रिलीज होती है, और जो प्रश्न पूछते हैं उन्हें आमतौर पर उत्तर दिया जाता है।

+1

सेकेंडेड। मैंने सी ++ के लिए यूनिट टेस्ट फ्रेमवर्क की एक मुट्ठी भर कोशिश की है, और यूनिटटेस्ट ++ मेरी राय में आसानी से सबसे अच्छा है। आप सही हैं कि यह नोएल लोपिस द्वारा विकसित किया गया था। Http://gamesfromwithin.com/?p=51 देखें। – Geerad

1

एक और समस्या जो लोग अत्यधिक इंजीनियर हैं।

नीचे नाममात्र इकाई परीक्षण आधारभूत संरचना का एक शीर्ष-का-मेरा-सिर, मोटा, गैर-कार्य कार्यान्वयन है। यह std::string नेमस्पेस/क्लास नाम के साथ टेस्ट बनाने के लिए कुछ समझ में आता है और यह जांचने के लिए एक सतत नामकरण योजना का उपयोग करें कि कौन सा परीक्षण विफल हो रहा है। मैं सिर्फ एक यूनिट टेस्ट टेम्पलेट का उपयोग करता हूं और कुछ स्क्रिप्ट्स हैं जो u (प्रति वर्ग एक) से शुरू होने वाले सभी निष्पादन योग्य पाते हैं, उन्हें बदले में चलाते हैं और वापसी मान एकत्र करते हैं।

struct Test 
{ 
    std::vector<(std::string)fptr*(void)> tests; 
    int run() const 
    { 
     int stat(0); 
     for (/* tests */) 
     { 
     std::string const res(test.run()); 
     if (!res.empty()) 
     { 
      std::cerr << res; 
      ++stat; 
     } 
     } 
     return stat; 
    } 
}; 

std::string test1() 
{ 
    std::ostringstream oss; 
// do a bunch of stuff 
// mark some of this code to be pulled into the class documentation 

    // conditional checks follow 
    if (fail) 
    { 
     oss << "fail: some reason" << std::endl; 
    } 
// more checks 
    return oss.str(); 
} 

int main(void) 
{ 
    Tests tests; 
    tests.push_back(test1); 
    tests.push_back(test2); 
    return tests.run(); 
} 
+2

ठीक है, हाँ। लेकिन एक अच्छा यूनिट परीक्षण ढांचा वास्तव में उससे भी बहुत कुछ करता है। –

+0

अपनी सभी ऑब्जेक्ट फ़ाइलों को एक साथ जोड़कर और आपको एक और लाइब्रेरी में खींचने के लिए मजबूर करता है? – Brian

0

आप विंडोज़ का उपयोग कर रहे हैं, पर एक नज़र डालें: Limitations of using C++/CLI with NUnit और http://en.wikipedia.org/wiki/Managed_Extensions_for_C%2B%2B में अपने परीक्षण में लिखें।

भी

: http://golios.blogspot.com/2008/12/using-nunit-with-c-part-2.html, http://golios.blogspot.com/2008/11/using-nunit-with-native-c.html

यह सिर्फ तथ्य यह है कि nunit प्रत्येक परीक्षा चलाने से पहले परीक्षण का मामला वर्ग का एक नया उदाहरण पैदा नहीं करता के अलावा JUnit तरह काम करेंगे।

1

बेकार प्लग: यदि आप विंडोज़ को लक्षित करते हैं और विजुअल स्टूडियो का उपयोग कर रहे हैं, तो cfix और cfix studio देखें।

यह WinUnit के लिए भी संगत है।

2

विकिपीडिया C++ के लिए इकाई परीक्षण चौखटे की एक लंबी सूची और C के लिए एक और सूची है।

2

मैं विंडोज और लिनक्स के तहत Qt के साथ काम कर रहा हूं, जो एक एकीकृत एकीकृत प्रदान करता है (लेकिन अन्य अलग-अलग समाधानों की तुलना में थोड़ा सीमित) परीक्षण ढांचे।

यह जानने के लिए उपयोग करने के लिए बहुत आसान और तेज है - देखना QTestLib

Ciao, क्रिस

1

क्यों CppUnit का उपयोग नहीं? यह जुनीट के बंदरगाह के रूप में बनाया गया था।

0

कैच का उपयोग करने का प्रयास करें। http://catch-lib.net

इसका उपयोग करना और सेटअप करना और सबसे अधिक शक्तिशाली है।

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