इकाई परीक्षणों की बनाम इकाई परीक्षणों की रूढ़िवादिता


14

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

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

इसलिए प्रत्येक व्यवहार के लिए मेरे परीक्षणों ने व्यवहार की स्थापना की, इसे मानचित्र पर लिखें, फिर वांछित आंदोलन को पूरा करने के लिए मानचित्र-पार्सिंग फ़ंक्शन को निष्पादित करता है। अगर वह आंदोलन मेरे विनिर्देशों को पूरा करता है तो मुझे खुशी है।

हालाँकि अब मेरे परीक्षण सही ढंग से काम करने वाले दोनों व्यवहारों और सही ढंग से काम करने वाले मानचित्र पार्सिंग फ़ंक्शन पर निर्भर करते हैं। यदि पार्सिंग फ़ंक्शन विफल हो जाता है, तो मुझे एक जोड़े के बजाय सैकड़ों असफल परीक्षण मिलेंगे। कई परीक्षण-लेखन मार्गदर्शकों का सुझाव है कि यह एक बुरा विचार है।

हालाँकि, अगर मैं नक्शे का मजाक उड़ाकर सीधे तौर पर व्यवहार के उत्पादन के खिलाफ परीक्षण करता हूं, तो निश्चित रूप से मैं कार्यान्वयन के लिए बहुत कसकर युग्मन कर रहा हूं? यदि मैं थोड़ा अलग व्यवहार का उपयोग करके मानचित्र से समान वांछित आंदोलन प्राप्त कर सकता हूं, तो परीक्षण अभी भी पास होना चाहिए।

इसलिए अब मैं संज्ञानात्मक असंगति को झेल रहा हूं। इन परीक्षणों की संरचना का सबसे अच्छा तरीका क्या है?


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

जवाबों:


10

आदर्श दुनिया में, आप वास्तव में पूरी तरह से ऑर्थोगोनल यूनिट परीक्षणों का एक सेट होगा, सभी अमूर्तता के समान स्तर पर।

वास्तविक दुनिया में, आपके पास आमतौर पर ऐप के कई अलग-अलग स्तरों पर परीक्षण होते हैं, इसलिए अक्सर उच्च स्तर के परीक्षण व्यायाम की कार्यक्षमता है जो पहले से ही निम्न स्तर के परीक्षणों द्वारा भी परीक्षण किया गया है। (बहुत से लोग यूनिट परीक्षणों के बजाय इस तरह के उच्च स्तर के परीक्षण सबसिस्टम / एकीकरण परीक्षणों को बुलाना पसंद करते हैं; फिर भी वे एक ही इकाई परीक्षण ढांचे पर चल सकते हैं, इसलिए तकनीकी दृष्टिकोण से बहुत अंतर नहीं है।)

मुझे नहीं लगता कि यह एक बुरी बात है। मुद्दा यह है कि आपके कोड ने सबसे अच्छे तरीके से परीक्षण किया है जो आपकी परियोजना और आपकी स्थिति के अनुकूल है, न कि "आदर्श तरीके" का पालन करने के लिए।


मुझे लगता है कि लेखक का मुख्य बिंदु यह था कि क्या आपको इन उच्च-स्तरीय परीक्षणों के लिए स्टब्स / मोक्स या वास्तविक कार्यान्वयन का उपयोग करना चाहिए
साइबेरियाई

2

इस तरह के परीक्षण के कारण मोक्स का आविष्कार किया गया था। मुख्य विचार: आप अपनी वस्तु (मानचित्र, व्यवहार, चरित्र, ...) के लिए एक नकली लिखते हैं, फिर वास्तविक वस्तु के बजाय उस नकली का उपयोग करके परीक्षण लिखते हैं। लोग कभी-कभी मॉक स्टब्स कहते हैं, और मेरा मानना ​​है कि दोनों के लिए अन्य शब्द हैं।

आपके मामले में, आप मानचित्र के लिए एक मॉक लिखेंगे जब भी आपको व्यवहार का परीक्षण करने की आवश्यकता होती है, और जब भी आप मानचित्र का परीक्षण करना चाहते हैं, तो व्यवहार के लिए अन्य नकली। आपके मॉक आदर्श रूप से आपके द्वारा किए जा रहे वास्तविक व्यवहारों की तुलना में बहुत सरल होंगे, केवल उन तरीकों या चर को शामिल करना जो आपको वास्तव में उस परीक्षा के लिए आवश्यक हैं। आपको प्रत्येक परीक्षण के लिए एक अलग नकली लिखना पड़ सकता है, या आप कुछ नकली का पुन: उपयोग करने में सक्षम हो सकते हैं। भले ही, वे परीक्षण के लिए अनुकूल होना चाहिए, और जितना संभव हो उतना वास्तविक व्यवहार की तरह बनने की कोशिश नहीं करनी चाहिए।

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


0

मुझे लगता है कि आप एक इकाई की तुलना में बहुत अधिक स्तर वाले सामान का परीक्षण करने का प्रयास करते हैं।

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


यही कारण है कि मैंने सहमति का उल्लेख किया। मैं बहुत आसानी से एक व्यवहार के भीतर कोड की व्यक्तिगत लाइनों का परीक्षण करने के लिए छोटी इकाई परीक्षण लिख सकता हूं, और किया है, लेकिन यह मानचित्र पार्सिंग फ़ंक्शन के आउटपुट को पढ़ने पर निर्भर करता है। मेरा कोई भी व्यवहार परीक्षण बड़ा नहीं है, उनमें से प्रत्येक व्यवहार की कार्यक्षमता का केवल एक टुकड़ा परीक्षण करता है।
11:10 बजे दस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.