मॉकिंग के साथ आर्कओबजेक्ट्स की इकाई परीक्षा कैसे करें?


10

मैं यूनिट टेस्टिंग का बहुत बड़ा प्रशंसक हूँ, लेकिन फिर भी आर्कोबजेक्ट्स फ्रेमवर्क का उपयोग करते हुए यूनिट टेस्ट चलाने के लिए फीचर्स को हथियाने के लिए FGDB का उपयोग करते हैं।

क्या कोई भी आइफिट्योर, आईजीओमेट्री, आईवेर्कस्पेस आदि जैसी सोच के खिलाफ सफलतापूर्वक प्रयोग कर रहा है। मैं वास्तव में इस बात की परवाह नहीं करता कि आप किस मॉकिंग फ्रेमवर्क का उपयोग करते हैं, बस यह देखते हुए कि आप यह कैसे कर रहे हैं, इसकी बहुत सराहना की जाएगी।

मैं देख रहा हूँ कि समस्या यह है कि आप एक ही वस्तु पर इतने सारे इंटरफेस के बीच स्लाइस और पासा कर रहे हैं, कि प्रतिनिधि मॉक ऑब्जेक्ट बनाने का ओवरहेड बहुत बड़ा होगा।


किसी और के लिए जो मॉकिंग (मेरे जैसे) के बारे में नहीं जान सकता है, कृपया इस लिंक को देखें। दिलचस्प सामान। stackoverflow.com/questions/300177/…
सिमोन

जवाबों:


14

हमारे पास, एक बड़े प्रोजेक्ट पर, आर्कोबजेक्ट्स कोड को हमारे व्यावसायिक तर्क से अलग करने के लिए काफी अच्छी तरह से प्रबंधित किया गया है। यह आम तौर पर जाने का रास्ता है, मैं कहूंगा कि यह सब बाहर करने का प्रयास करने के बजाय, भले ही यह संभव हो कि कुछ रास्ते पाने के लिए मॉकिंग फ्रेमवर्क का उपयोग करना संभव हो।

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

मैं हमारी परियोजना से एक ठोस उदाहरण दे सकता हूं। कोड का एक भाग IMxDocument पर निर्भर करता था। यह एकमात्र कारण था कि सक्रिय दृष्टिकोण को ताज़ा करने की आवश्यकता थी। इसलिए हमने इसके बजाय एक IViewRefresher इंटरफ़ेस बनाया और केवल उसी पर काम किया; मॉक और टेस्ट करने में आसान। इसके अतिरिक्त, यह बनाता है आशय कोड अधिक स्पष्ट की और किसी IMxDocument है कि वे क्या करना है क्योंकि सभी हम यहाँ करना चाहते थे ताज़ा था चाहिए नहीं कर रहे थे के साथ अजीब बातें कर रही शुरू करने के लिए प्रलोभन निकाल देता है। एक ही अभ्यास बहुत सारे आर्कोबजेक्ट्स कोड के साथ किया जा सकता है।

इसके अलावा, हमने सभी वर्गों को प्रकार के सुरक्षित रैपर में सुविधा के लिए लपेट दिया, फिर से आर्कॉयजेक्ट से व्यावसायिक कोड को परिरक्षित करने के लिए नकली कोड प्रदान किया।

हमने आर्कओबजेक्ट्स के ज्यामिति प्रकारों का उपयोग नहीं करने पर भी चर्चा की है, लेकिन वर्तमान में हम उन इंटरफेस को सीधे हमारे कोड में उपयोग करने की अनुमति देते हैं। (हालांकि, इंटरफ़ेस ज्ञान की अनुमति केवल है और ज्यामिति के सभी इंस्टेंटेशन हमारे अपने ज्यामिति कारखाने का उपयोग करते हैं।)

सारांश में, मैं मॉकिंग को अस्वीकार नहीं कर रहा हूं, लेकिन मैं आर्कओब्जेक्ट्स की तुलना में एब्सट्रैक्शन के एक अलग स्तर पर मॉकिंग को प्रोत्साहित करूंगा।


महान जवाब Cumbayah। मैं भी AO कोड परीक्षण इकाईयों की एक बहुत कुछ है। आपके द्वारा दिया गया उदाहरण बहुत अच्छा था (IViewRefresher) और मैं इसे यहाँ अपने काम पर लागू कर सकता हूँ। क्या आप और उदाहरण दे सकते हैं?
जॉर्ज सिल्वा

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

Cumbayah, यह अविश्वसनीय लगता है। मैं कुछ उदाहरणों से प्यार करूंगा। क्या आपने कभी इस विषय पर ESRI के किसी सम्मेलन में कुछ प्रस्तुत करने पर विचार किया है? मुझे लगता है कि ESRI / GIS समुदाय इस तरह के सामान के लिए मर रहा है। कुछ ओपन सोर्स मूवमेंट को देखना पसंद करेंगे जो आर्कोबजेक्ट्स के परीक्षण / मॉकिंग के लिए शुरू किए गए हैं।
कीथ जी

यह एक पुराना विषय है जिसे मैं समझ रहा हूं, लेकिन कोई भी मौका हमें आपके "खुद के ज्यामिति कारखाने" का एक नमूना मिल सकता है? मैं अपने संगठन को इकाई परीक्षण की दिशा में ले जाने की कोशिश कर रहा हूं, लेकिन मैं आर्कऑब्जेक्ट्स बंदर पर लटका हुआ हूं।
ल्यूक

4

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


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