2009-02-11 8 views
9

पर यूनिट परीक्षण के साथ सर्वोत्तम अभ्यास हम ऑटोकैड के भीतर उपयोग के लिए अनुप्रयोग विकसित कर रहे हैं। असल में हम एक क्लास लाइब्रेरी प्रोजेक्ट बनाते हैं, और कमांड (नेट) के साथ ऑटोकैड में .dll लोड करते हैं।थर्ड पार्टी सॉफ्टवेयर एपीआई (ऑटोकैड)

के रूप में इसलिए, हम आदेश, "पट्टियाँ", उपयोगकर्ता नियंत्रण, रूपों आदि का उपयोग कर सकते हैं ...

AutoDesk उनके कार्यक्रम निर्देशिका में चल रहा है, कुछ dll के माध्यम से एक एपीआई प्रदान करता है। इन डीएल के संदर्भ में जब आप ऑटोकैड में अपना ऐप लोड करते समय केवल डीएलएल को रनटाइम पर कॉल कर सकते हैं (यह ऑटोडेस्क से एक लाइसेंसिंग सुरक्षा है)।

हमारे लिए, विकास करते समय, यह कोई समस्या नहीं है, हमें ऑटोकैड के संदर्भ में दृष्टि से परीक्षण करने की आवश्यकता है, इसलिए हम केवल डीबग गुण सेट करते हैं ताकि वे acad.exe शुरू करें और हमारे डीएल को एक स्क्रिप्ट के साथ लोड करें acad.exe पैरामीटर।

समस्या यह है कि, हमारे कोड का परीक्षण करने की कोशिश करते समय, NUnit या mstest ऑटोकैड संदर्भ में से नहीं चल रहे हैं और वे इसे भी शुरू नहीं कर सकते हैं। गैलियो नामक एक उपकरण मौजूद है, जिसने ऑटोकैड के साथ एक इंटरफेस प्रदान किया है, ताकि यह नामित पाइप्स के साथ आईपीसी के माध्यम से यूनिट परीक्षण चला सके।

हालांकि, यह समाधान मेरे लिए बहुत परेशानी है। मैं अपने प्यारे आईडीई को छोड़ दिए बिना परीक्षण लिखने में सक्षम होना चाहता हूं।

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

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

उत्तर

8

पहला कदम उन हिस्सों के लिए अपने कोड को ट्रिगर करना है, जिन्हें ऑटोकैड और भागों को वास्तव में स्वतंत्र करने की आवश्यकता है। स्वतंत्र भागों के लिए यूनिट परीक्षण बनाएं जो आप आमतौर पर करेंगे।

अन्य भागों के लिए, आपको मॉकअप की आवश्यकता है जो ऑटोकैड की तरह व्यवहार करते हैं। उन्हें यथासंभव सरल बनाएं (उदाहरण के लिए, बिना किसी गणना के तरीकों में सही उत्तरों को वापस करें)।

  1. इंटरफेस का एक सेट है जो आपके कोड कुछ प्राप्त करने के लिए उपयोग करता है (उदाहरण के लिए, एक ड्राइंग लोड): अब, आप कक्षाओं के कई सेट की जरूरत है।

  2. इंटरफेस के सेट के लिए कार्यान्वयन का एक सेट जो ऑटोकैड डीएलएस को कॉल करता है।

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

  4. जब आप जानते हैं कि ऑटोकैड कैसे प्रतिक्रिया करता है, तो नकली बनाएं। अपने परीक्षणों में, उन्हें वांछित परिणाम (और त्रुटियों के साथ बनाएं, ताकि आप भी त्रुटि प्रबंधन का परीक्षण कर सकें)। तो जब आपके पास boolean loadDrawing(File filename) है, तो एक मॉकअप बनाएं जो फ़ाइल नाम exists.dxf और false के लिए true लौटाता है।

  5. उपयोग करने के लिए कार्यान्वयन के लिए अपने आवेदन कोड को बताने के लिए एक कारखाने या DI का उपयोग करें। मेरे पास बहुत से सार्वजनिक क्षेत्र के साथ एक बड़ी वैश्विक विन्यास कक्षा है जहां मैं वस्तुओं का उपयोग करने के लिए बस स्टोर करता हूं। मैं इसे शुरुआत में सेट कर सकता हूं, यह तेज़ है, समझना आसान है। यदि आपको रनटाइम पर ऑब्जेक्ट्स बनाने की आवश्यकता है, तो कॉन्फ़िगरेशन क्लास में कारखानों को रखें जो आपके लिए ऑब्जेक्ट जेनरेट करते हैं, ताकि आप उन्हें स्वैप कर सकें।

+0

आपके उत्तर के लिए धन्यवाद। मैं उस दिशा में देख लूंगा। मुझे आपकी 3 डी टिप्पणी में कोई समस्या है: चूंकि हम केवल एक फ़ाइल नहीं खोल रहे हैं लेकिन लेनदेन का उपयोग कर रहे हैं, ऑब्जेक्ट्स आदि संपादित कर रहे हैं ... क्या मुझे प्रत्येक Acad ऑब्जेक्ट के लिए एक रैपर बनाना चाहिए? – Bertvan

+2

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

0

मैंने लिखा ... और बाद में तोड़ दिया ... ऑटोकैड के लिए एक टेस्ट धावक। यह https://github.com/CADbloke/CADtest पर है। यदि आप इसमें दिलचस्पी रखते हैं तो मुझे साथ झुकाएं और मैं इसे तेज़ी से ठीक कर दूंगा। मैं इससे पहले कि मैं इससे निपटने से पहले NUnit v3 रिलीज की प्रतीक्षा कर रहा हूं।

यदि आप उस रेपो (मुझे लगता है) में तीसरी प्रतिबद्धता पर रीसेट करते हैं और वहां से इसके साथ बेवकूफ चलाना चाहिए।