2013-09-30 7 views
6

मैं अपने कुछ वर्गों के लिए यूनिट परीक्षण लिखना चाहता हूं। मेरी कुछ कक्षाएं किसी तृतीय-पक्ष लाइब्रेरी पर निर्भर करती हैं जो फ़ाइल सिस्टम का उपयोग करती है और इसमें नकली करने के लिए कोई इंटरफेस नहीं है।किसी तृतीय-पक्ष लाइब्रेरी को इंटरफेस लागू करने की रणनीति?

मैं कक्षा उपहास करने के लिए, फाइल सिस्टम पर अपनी निर्भरता से बचने के लिए के बाद से मेरी कोड वास्तव में केवल कि कोड के परिणामों के बारे में चिंतित है चाहते।

सबसे अच्छी रणनीति प्रारंभिक पुस्तकालय को संशोधित किए बिना पुस्तकालय की ठोस वर्ग उपहास करने के लिए उपयोग करने के लिए क्या है?

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

या, TypeMock जैसे किसी उपकरण का इस मामले में Moq की तुलना में बेहतर अनुकूल होगा?

+0

सुनिश्चित नहीं है कि मैं काफी समझता हूं - यदि आप पुस्तकालय का परीक्षण करना चाहते हैं तो आप इसे क्यों मजाक करेंगे? – GarethOwen

+0

क्षमा करें, खराब वाक्यांश - इसे बहुत जल्दी लिखा है। मैं संपादित करूँगा: अब मोबाइल पर। अनिवार्य रूप से मेरा मतलब है कि मैं पुस्तकालय का उपयोग अपने कोड के परीक्षणों में करना चाहता हूं लेकिन यह फाइल सिस्टम का उपयोग करता है। मैं इसे अपने परीक्षण तेजी से/अधिक मजबूत बनाने के लिए नकली करना चाहता हूं। – SeanKilleen

+0

ठीक समझा। इसलिए लाइब्रेरी फ़ाइल सिस्टम पर निर्भरता है, और आप इसे 'मॉक' फ़ाइल सिस्टम के साथ बदलना चाहते हैं। एक अच्छा सवाल है। – GarethOwen

उत्तर

10

पृष्ठभूमि:

जब तक यह एक स्थिर पुस्तकालय/नेट ढांचे की तरह ढांचा है, मैं इसे से मेरी कोड दसगुणा पसंद करते हैं। यही है, मैं पुस्तकालय को इसके बजाय मेरे सिस्टम पर निर्भर करता हूं।

संपादित करें, रेफरी: आप "स्थिर" का उपयोग कर रहे लाइब्रेरी पर विचार कर सकते हैं। हालांकि, चूंकि यह एक "बाहरी" प्रणाली (फाइल सिस्टम) के साथ इंटरैक्ट करता है, इसलिए मैं अब भी अपने सिस्टम को इसे रद्द करना चाहता हूं।

इसे पूरा करने के लिए, मैं लाइब्रेरी के लिए एडाप्टर/रैपर बना देता हूं। इंटरफ़ेस में वे विधियां हैं जिनसे मेरा सिस्टम लाइब्रेरी चाहता है, न कि लाइब्रेरी प्रदान करने के लिए। इंटरफ़ेस उन प्रकारों का उपयोग करता है जिनके सिस्टम का स्वामित्व है, लाइब्रेरी से कोई भी नहीं। एडाप्टर किसी भी रूपांतरण आवश्यक बनाता है।

यह मैं क्या मैं उपहास करने के लिए/ठूंठ/नकली पुस्तकालय या नहीं करना चाहता, क्योंकि यह चिंताओं का एक अच्छा जुदाई प्रदान करता है और यह भी पुस्तकालय में परिवर्तन के खिलाफ अपने सिस्टम की सुरक्षा करता है।

अपने प्रश्न का उत्तर:

एडॉप्टर/आवरण इसमें नकली अपने परीक्षण में यह करने के लिए आसान है। बोनस के रूप में, चूंकि एडाप्टर आपके सिस्टम की भाषा का उपयोग करता है, इसलिए उन परीक्षणों को लिखना आसान होगा जो पढ़ने और समझने में आसान हैं।

आप एक नकली ढांचे का उपयोग या adapeter के लिए अपने स्वयं के नकली लिखना चाहे स्वाद की बात है।

+0

मेरे लिए अच्छा लगता है – GarethOwen

+2

यदि आप इस मार्ग पर जाते हैं तो आपको अभी भी अपने रैपर का परीक्षण करना चाहिए। रैपर के लिए यूनिट परीक्षण यह हो सकता है कि आप इसे कितना सरल बना सकते हैं, लेकिन कम से कम एकीकरण परीक्षण में अपना वास्तविक कार्यान्वयन (नकली नहीं) शामिल करें। –

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