C ++ आधारित खेलों के लिए कौन सी इकाई परीक्षण रूपरेखा? [बन्द है]


13

आपको लगता है कि परीक्षण उपकरण का कौन सा संयोजन सबसे अच्छा है? अपनी पसंद के ढांचे / पुस्तकालय को देखते हुए आप इस पर विचार कर सकते हैं:


नोट: हालांकि यह संभावित रूप से एसओ पर एक जेनेरिक प्रश्न है जैसे मैं तर्क देता हूं कि खेल विकास आमतौर पर एक विशिष्ट कार्य प्रवाह के लिए बाध्य है जो परीक्षण के लिए विकल्प को प्रभावित करता है। उच्च-स्तरीय परिप्रेक्ष्य के लिए, प्रश्न को खेलों के स्वचालित परीक्षण के रूप में देखें ।


जबकि मुझे सीधे इस प्रश्न में कुछ भी गलत नहीं दिखता है, लेकिन मुझे लगता है कि इसे कम्युनिटी विकी बनाने से फायदा होगा। उदाहरण के लिए: gamedev.stackexchange.com/questions/480/...
जेसी दोर्से

मैंने इसे सीडब्ल्यू बना दिया। हालाँकि, मुझे लगता है कि सीडब्ल्यू को एक प्रश्न बनाने के लिए दिशा-निर्देश मुझे एक नवागंतुक के रूप में थोड़ा अस्पष्ट लगते हैं, खासकर जब से सामान्य रूप से इस पर बहस की जाती है ( meta.stackexchange.com/questions/55888 )। शायद हम अक्सर पूछे जाने वाले प्रश्न में इस बारे में स्पष्ट रूप से gamedev नीति बता सकते हैं?
jmp97

जवाबों:


7

मैंने पाया कि UnitTest ++ के साथ काम करना बहुत आसान है। मुझे अभी भी इसके साथ-साथ कोशिश करनी होगी , जिसका उल्लेख माइनर कार्यक्षमता के लिए UnitTest ++ के एक अच्छे साथी के रूप में किया गया था। अन्यथा Google मॉक एक लोकप्रिय विकल्प है। इसके अलावा, आप UnitTest ++ और मॉक ऑब्जेक्ट्स पर पढ़ना चाह सकते हैं ।

यूनिटटेस्ट ++ को हडसन के साथ आपके कंटीन्यूअस इंटीग्रेशन अप्रोच के साथ सेट किया जा सकता है

आप इस प्रेरक पोस्ट को पढ़ना चाह सकते हैं यदि आप आश्वस्त नहीं हैं कि यूनिट परीक्षण और गेम एक साथ अच्छी तरह से चलते हैं।


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

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

4

UnitTest ++ के लिए एक और वोट । एकीकृत करने के लिए बहुत आसान है, हमारे लक्ष्य एम्बेडेड प्लेटफॉर्म के लिए बहुत आसानी से सीधा और आसान उपयोग के लिए संकलित। हमने हडसन के साथ भी इसे एकीकृत किया है। हमने GoogleTest को देखा, लेकिन इसे अस्वीकार कर दिया (मुझे लगता है कि इसमें हमारे लक्ष्य मंच के लिए संकलन के मुद्दे थे) लेकिन इसमें एक समान सुविधा सेट है और यह आपके लिए उपयुक्त हो सकता है।

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


2

जब मैं C ++ (अस्वीकरण: यह 2005 के बारे में था) में काम कर रहा था, तो मैंने TUT (टेम्पलेट यूनिट फ्रेमवर्क) के थोड़ा संशोधित संस्करण का उपयोग किया । मुझे यह पसंद आया क्योंकि यह बहुत हल्का था, जिससे इसे संशोधित करना आसान था, और इसका मतलब था कि परीक्षण लिखते समय बहुत कम "गोंद" आवश्यक था।

यहाँ एक बहुत सरल संशोधन मैंने किया है, जो इसे परीक्षण लिखने के लिए भी ईजी / क्लीनर बनाता है:

static int BogusFunction() { return __COUNTER__; } // Increment the __COUNTER__ to the correct position for the begining of the tests
#define TEST template<> template<> void object::test<__COUNTER__>()
#define ENSURE(msg, cond) ensure(msg, cond, __FILE__, __LINE__)
#define ENSURE_EQUALS(msg, actual, expected) ensure_equals(msg, actual, expected, __FILE__, __LINE__)
#define ENSURE_DISTANCE(msg, actual, expected, distance) ensure_distance(msg, actual, expected, distance, __FILE__, __LINE__)
#define FAIL(msg) fail(msg, __FILE__, __LINE__)

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

(इस प्रकार की कार्य करने की क्षमता का अर्थ है कि यह आपके TDD / CI प्रक्रिया में फिट होने के लिए बनाया जा सकता है, बजाय इसके कि आप इसे फिट करने के लिए मजबूर करें।)

यहाँ एक उदाहरण परीक्षण है (मेरे संपादक से कमांड-स्टैक से):

TEST // Undoing a command
{
    cs.AddCommand(new TestCommand);
    cs.AddCommand(new TestCommand(od));

    ENSURE("Undo success", cs.Undo());
    ENSURE_EQUALS("Stack size", cs.size(), 2);
    ENSURE_EQUALS("Command's Undo() was called", od.undo, 1);
    ENSURE_EQUALS("Command's Redo() not called", od.redo, 0);

    ACommandStack::const_iterator it = cs.end();
    ENSURE("Command is redoable", cs.GetUndoPos() == --it);
}

(उपरोक्त कोड में, csऔर odप्रति-मॉड्यूल जुड़नार हैं, और TestCommandएक नकली वस्तु है।)


2

जब यह C ++ की बात आती है, तो मैंने googletest फ्रेमवर्क, http://code.google.com/p/googletest/ का उपयोग करने का प्रयास किया है । यह स्थापित करना आसान है, उपयोग करना आसान है और महान काम करता है।


2

मैं एक पेशेवर गेम डेवलपर नहीं हूं, लेकिन मैं एक पेशेवर एम्बेडेड डेवलपर हूं। शायद खेल पसंद नहीं है लेकिन करीब है। मेरे काम के स्थान पर हमने कुछ का उपयोग किया है।

मुझे वास्तव में google test पसंद है । इसमें हाल के यूनिट टेस्ट फ्रेमवर्क के सभी बेहतरीन फीचर्स हैं, जबकि यह सब एक न्यूनतम, स्ट्रीम लाइनेड इंटरफेस में रखा गया है।

मेरी सूची में अगला है बूस्ट टेस्ट । Google परीक्षण की एपीआई Boost.Test की तुलना में थोड़ा अधिक आधुनिक है, लेकिन बूस्ट टेस्ट ने नई सुविधाओं को जोड़ने और crufty CppUnit प्रतिमान को खोदने का एक अद्भुत काम किया है।

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

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


1

मेरा पसंदीदा परीक्षण पुस्तकालय QuickCheck http://en.wikipedia.org/wiki/QuickCheck है । एक प्रयोगात्मक C ++ संस्करण है, लेकिन यह बहुत भारी वजन दिखता है, लेकिन एक समर्पित पुस्तकालय के बिना भी सिद्धांतों का उपयोग करना आसान है।

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

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

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


0

जावा के साथ, बहुत सारे अच्छे पुस्तकालय हैं ... C ++ का मामला नहीं है।

C ++ उपयोगकर्ताओं के लिए, किटवेयर से एक चेन टूल है जो बहुत दिलचस्प है:

  • CMake: उपकरण बनाते हैं
  • सीडीएश: निरंतर एकीकरण उपकरण

कंप्यूटर साइंस के लिए किटवेयर C ++ कोड लिखता है।

व्यक्तिगत परियोजनाओं के लिए, मैं बूस्ट यूनिट टेस्ट लाइब्रेरी (डेस्कटॉप प्लेटफॉर्म पर) का उपयोग करता हूं। निरंतर एकीकरण के लिए, मैं हडसन का उपयोग करता हूं:

  • Tomcat पर आसान स्थापित करें
  • स्क्रिप्ट

0

मैं TUT (टेम्प्लेट यूनिट टेस्ट) की रूपरेखा तैयार करूंगा ; यह सुपर लाइटवेट और बेहद लचीला है, बॉक्स से बाहर सेटअप और उपयोग करने के लिए वास्तव में आसान नहीं है (एक ही हेडर शामिल है, मुख्य / सेटअप कोड का एक छोटा सा है, और परीक्षण कोड की 24 लाइनें बाद में आपके पास एक इकाई परीक्षण है)। मैंने इसे बड़ी सफलता के साथ तेजी से प्रोटोटाइप / TDD / लर्निंग टेम्प्लेट के लिए Binfmtc (स्क्रिप्ट के रूप में C ++ प्रोग्राम चलाएं) के साथ जोड़ दिया है , जिसमें एम्बेडेड सॉफ़्टवेयर विकास शामिल है। एक्सएमएल के लिए उत्पादन करने में सक्षम होने के कारण, यह भी अच्छी तरह से जेनकींस (सीआई) और सोनार के साथ खान की क्रमिक परियोजनाओं पर आधारित है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.