मेरे पास एक क्लास एपीआई है जिसमें पूर्ण कोड कवरेज है और मुख्य क्लास फ़ंक्शन (जॉब.रुन) में सभी तर्कों को मॉक करने के लिए DI का उपयोग करता है जो सभी काम करता है।NMock2.0 - एक गैर इंटरफ़ेस कॉल कैसे रोकें?
मुझे उत्पादन में एक बग मिला जहां हम डेटा इनपुट फ़ील्ड में से कुछ पर कुछ सत्यापन कर रहे थे।
तो, मैंने ValidateFoo() नामक एक स्टब फ़ंक्शन जोड़ा है ... जॉबफेल अपवाद की अपेक्षा करने के लिए इस फ़ंक्शन के विरुद्ध एक यूनिट परीक्षण लिखा है, परीक्षण चलाया - यह स्पष्ट रूप से विफल रहा क्योंकि यह कार्य खाली था। मैंने सत्यापन तर्क जोड़ा, और अब परीक्षण पास हो जाता है।
बढ़िया, अब हम सत्यापन कार्यों को जानते हैं। समस्या यह है कि मैं यह सुनिश्चित करने के लिए परीक्षण कैसे लिखूं कि ValidateFoo() वास्तव में Job.Run() के अंदर बुलाया जाता है? ValidateFoo() जॉब क्लास का एक निजी तरीका है - इसलिए यह एक इंटरफ़ेस नहीं है ...
क्या NMock2.0 के साथ ऐसा करने के लिए वैसे भी है? मुझे पता है टाइपमैक गैर इंटरफ़ेस प्रकारों के झुंड का समर्थन करता है। लेकिन अभी नकली libs बदलना एक विकल्प नहीं है। इस बिंदु पर यदि NMock इसका समर्थन नहीं कर सकता है, तो मैं बस ValidateFoo() कॉल को रन() विधि में जोड़ दूंगा और मैन्युअल रूप से परीक्षण करूँगा - जो स्पष्ट रूप से मैं अपने जॉब पर विचार नहीं करना चाहूंगा। Run() विधि है अभी 100% कवरेज। कोई सलाह? बहुत बहुत धन्यवाद इसकी सराहना की है।
संपादित करें: मेरे पास अन्य विकल्प है जो सिर्फ मेरे काम के लिए एकीकरण परीक्षण बनाना है। रून कार्यक्षमता (इसे मोक्स के बजाय समग्र वस्तुओं के वास्तविक कार्यान्वयन में इंजेक्शन देना)। मैं इसे उस क्षेत्र के लिए एक खराब इनपुट मान दूंगा और फिर यह सत्यापित करूंगा कि नौकरी विफल रही है। यह काम करता है और अपने परीक्षण को शामिल किया गया - लेकिन यह वास्तव में एक इकाई परीक्षण लेकिन इसके बजाय एक एकीकरण परीक्षण है कि कार्यक्षमता की एक इकाई का परीक्षण करती है .... हम्म नहीं है ..
EDIT2: वहाँ tihs करने के लिए कोई रास्ता नहीं है? किसी के पास विचार हैं? शायद TypeMock - या एक बेहतर डिजाइन?