नकली फ्रेम बनाम एमएस फेक फ्रेमवर्क


99

NMock बनाम VS 2011 फेक फ्रेमवर्क जैसे मॉक फ्रेमवर्क के मतभेदों पर थोड़ा भ्रमित। MSDN के माध्यम से जा रहा है, जो मैं समझता हूं कि फेक आपको राइनोमॉक या NMock की तरह अपनी निर्भरता का मजाक उड़ाने की अनुमति देता है, हालांकि दृष्टिकोण अलग है, फेक इस कार्यक्षमता को प्राप्त करने के लिए कोड उत्पन्न करता है लेकिन मोक्स फ्रेमवर्क नहीं करता है। तो क्या मेरी समझ सही है? क्या नकली सिर्फ एक और नकली ढांचा है

जवाबों:


189

आपका प्रश्न इस बारे में था कि MS Fakes फ्रेमवर्क NMock से किस तरह अलग है और ऐसा लगता है कि अन्य उत्तरों से कुछ हल हो गए हैं, लेकिन यहाँ कुछ और जानकारी दी गई है कि वे कैसे हैं और वे कैसे भिन्न हैं। NMock भी RhinoMocks और Moq के समान है, इसलिए मैं उन्हें NMock के साथ समूहीकृत कर रहा हूं।

NMock / RhinoMocks / Moq और MS Fakes फ्रेमवर्क के बीच 3 मुख्य अंतर हैं

  • एमएस फेक फ्रेमवर्क जेनेरिक प्रकारों के बजाय विजुअल स्टूडियो के पूर्व संस्करणों में एक्सेसर्स की तरह उत्पन्न कोड का उपयोग करता है। जब आप एक निर्भरता के लिए फ़ेक फ्रेमवर्क का उपयोग करना चाहते हैं, तो आप असेंबली को जोड़ते हैं जिसमें परीक्षण प्रोजेक्ट के संदर्भों पर निर्भरता होती है और फिर परीक्षण डबल्स (स्टब्स या शम्स) उत्पन्न करने के लिए उस पर राइट-क्लिक करें। फिर जब आप परीक्षण कर रहे हैं, तो आप वास्तव में इन उत्पन्न वर्गों का उपयोग कर रहे हैं। NMock एक ही चीज़ (यानी IStudentRepository studentRepository = mocks.NewMock<IStudentRepository>()) को पूरा करने के लिए जेनेरिक का उपयोग करता है । मेरी राय में, एमएस फेक फ्रेमवर्क दृष्टिकोण कोड नेविगेशन को बाधित करता है और परीक्षणों के भीतर से रिफैक्टिंग करता है क्योंकि आप वास्तव में एक उत्पन्न वर्ग के खिलाफ काम कर रहे हैं, न कि आपका वास्तविक इंटरफ़ेस।

  • एमएस ढांचे की आपूर्ति स्टब्स और मोल (शिम्स), जबकि NMock, RhinoMocks, और Moq सभी स्टब्स और प्रदान नकली mocks । मैं वास्तव में एमएसीएस के निर्णय को नहीं समझता हूं कि इसमें मॉक शामिल नहीं है और मैं नीचे वर्णित कारणों से व्यक्तिगत रूप से मोल्स का प्रशंसक नहीं हूं।

  • एमएस फेक ढांचे के साथ, आप उन तरीकों के वैकल्पिक कार्यान्वयन की आपूर्ति करते हैं जिन्हें आप स्टब करना चाहते हैं। इन वैकल्पिक कार्यान्वयनों के भीतर, आप रिटर्न मान निर्दिष्ट कर सकते हैं और इस बारे में जानकारी ट्रैक कर सकते हैं कि कैसे या अगर विधि को बुलाया गया था। NMock, RhinoMocks और Moq के साथ, आप एक मॉक ऑब्जेक्ट जेनरेट करते हैं और फिर स्टैब्ड रिटर्न वैल्यूज़ को निर्दिष्ट करने के लिए या इंटरैक्शन को ट्रैक करने के लिए उस ऑब्जेक्ट का उपयोग करते हैं (चाहे और कैसे तरीकों को बुलाया गया था)। मुझे लगता है कि एमएस फेक अधिक जटिल और कम अभिव्यंजक दृष्टिकोण करते हैं।

फ्रेमवर्क क्या प्रदान करते हैं, इसके अंतर को स्पष्ट करने के लिए: NMock, RhinoMocks और Moq सभी दो प्रकार के टेस्ट डबल्स (स्टब्स और मॉक) प्रदान करते हैं। नकली फ्रेम स्टब्स और मोल्स प्रदान करता है (वे उन्हें शिम कहते हैं), और दुर्भाग्य से मोक्स शामिल नहीं हैं। NMock और MS Fakes के बीच अंतर और समानता को समझने के लिए, यह समझना उपयोगी है कि ये विभिन्न प्रकार के परीक्षण युगल क्या हैं:

स्टब्स: स्टब्स का उपयोग तब किया जाता है जब आपको तरीकों या गुणों के लिए एक मान प्रदान करने की आवश्यकता होती है जो परीक्षण के तहत विधि द्वारा आपके परीक्षण डबल्स के बारे में पूछा जाएगा। उदाहरण के लिए, जब परीक्षण के तहत मेरा तरीका IStudentRepository परीक्षण के DoStudentExist () विधि को दोहराता है, तो मैं चाहता हूं कि यह सच हो।

NMock और MS फेक में स्टब्स का विचार एक समान है, लेकिन NMock के साथ आप कुछ इस तरह करेंगे:

Stub.On(mockStudentRepository).Method("DoesStudentExist").Will(Return.Value(true));

और MSFakes के साथ आप इस तरह से काम करेंगे:

IStudentRepository studentRepository = new DataAccess.Fakes.StubIStudentRepository() // Generated by Fakes.
{
    DoesStudentExistInt32 = (studentId) => { return new Student(); }
};

MS Fakes उदाहरण में सूचना आप DoStudentExist पद्धति के लिए एक पूरी तरह से नया कार्यान्वयन बनाते हैं (ध्यान दें कि इसे DoStudentExistInt32 कहा जाता है क्योंकि नकली फ्रेम पैरामीटर डेटा प्रकारों को विधि नामों में जोड़ देता है जब यह स्टब ऑब्जेक्ट्स उत्पन्न करता है, मुझे लगता है कि यह अस्पष्टता को स्पष्ट करता है जाँच)। ईमानदार होने के लिए NMock कार्यान्वयन भी मुझे परेशान करता है क्योंकि यह विधि नाम की पहचान करने के लिए एक स्ट्रिंग का उपयोग करता है। (मुझे माफ़ कर दो अगर मैंने गलत समझा कि NMock का उपयोग कैसे किया जाता है।) यह दृष्टिकोण वास्तव में रिफैक्टिंग को रोकता है और मैं इस कारण से NMock पर RhinoMocks या Moq की अत्यधिक अनुशंसा करता हूँ।

मोक्स: मोक्स का उपयोग परीक्षण और इसकी निर्भरता के तहत आपकी विधि के बीच बातचीत को सत्यापित करने के लिए किया जाता है। NMock के साथ, आप इस तरह की अपेक्षाओं को स्थापित करके ऐसा करते हैं:

Expect.Once.On(mockStudentRepository).Method("Find").With(123);

यह एक और कारण है कि मैं NMock पर राइनोमॉक्स और Moq को क्यों पसंद करूंगा, NMock पुरानी उम्मीद की शैली का उपयोग करता है जबकि RhinoMocks और Moq दोनों ही अरेंज / एक्ट / एस्टर के दृष्टिकोण का समर्थन करते हैं जहां आप इस तरह के परीक्षण के अंत में मुखर होने के रूप में अपेक्षित इंटरैक्शन निर्दिष्ट करते हैं। :

stubStudentRepository.AssertWasCalled( x => x.Find(123));

फिर, ध्यान दें कि RhinoMocks विधि की पहचान करने के लिए एक स्ट्रिंग के बजाय एक लैम्ब्डा का उपयोग करता है। एमएस फेक फ्रेमवर्क मोक्स प्रदान नहीं करता है। इसका मतलब यह है कि आपके स्टब आउट कार्यान्वयन में (ऊपर स्टब्स का विवरण देखें) आपको चर सेट करने होंगे जिन्हें आपने बाद में सत्यापित किया था कि वे सही ढंग से सेट किए गए हैं। यह कुछ इस तरह दिखेगा:

bool wasFindCalled = false;

IStudentRepository studentRepository = new DataAccess.Fakes.StubIStudentRepository() 
{
    DoesStudentExistInt32 = (studentId) => 
        { 
            wasFindCalled = true;
            return new Student(); 
        }
};

classUnderTest.MethodUnderTest();

Assert.IsTrue(wasFindCalled);

मुझे लगता है कि यह दृष्टिकोण थोड़ा जटिल है क्योंकि आपको स्टब में कॉल को ट्रैक करना होगा और फिर बाद में परीक्षण में जोर देना होगा। मैं NMock, और विशेष रूप से RhinoMocks, और अधिक अर्थपूर्ण होने के लिए उदाहरण ढूंढता हूं।

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

using (ShimsContext.Create())
{
    System.Fakes.ShimDateTime.NowGet = () => { return new DateTime(fixedYear, 1, 1); };
}

शिमर्स के साथ मेरी चिंता यह है कि लोग उन्हें "यूनिट टेस्ट के लिए एक आसान तरीका" के रूप में देखना शुरू कर देंगे क्योंकि यह आपको उस तरह से कोड लिखने के लिए मजबूर नहीं करता है जो आपको करना चाहिए। इस अवधारणा पर एक और पूर्ण लिखने के लिए मेरा यह पोस्ट देखें:

फ़ेक फ्रेमवर्क से संबंधित कुछ चिंताओं के बारे में अधिक जानकारी के लिए इन पदों पर एक नज़र डालें:

यदि आप यहां राइनोमॉक्स सीखने में रुचि रखते हैं, तो प्लुरलइट प्रशिक्षण वीडियो (पूर्ण प्रकटीकरण - मैंने यह पाठ्यक्रम लिखा है और विचारों के लिए रॉयल्टी का भुगतान किया है, लेकिन मुझे लगता है कि यह इस चर्चा पर लागू होता है, इसलिए मैं इसे यहां शामिल करता हूं):


14
@ जाम मैं असहमत हूं कि किसी को "इंजेक्शन के बिना निर्भरता के खिलाफ परीक्षण करने" की अनुमति देना बुरी बात है। इसके विपरीत, व्यवहार में, यह क्षमता बहुत सारे व्यर्थ इंटरफेस और संबंधित "ऑब्जेक्ट वायरिंग" कॉन्फ़िगरेशन / जटिलता के साथ एक कोडबेस को अव्यवस्थित करने से बचने में मदद करती है। मैंने पहले से ही कुछ प्रोजेक्ट्स (जावा और .NET दोनों को देखा है) जिनमें सैकड़ों जावा / सी # इंटरफेस थे जिनमें केवल एक ही कार्यान्वयन वर्ग था, और बहुत सारे एक्सएमएल कॉन्फ़िगरेशन (स्प्रिंग डि बीन के लिए, या एमएस यूनिटी के लिए Web.config में। ढांचा)। इस तरह की निर्भरता बेहतर इंजेक्शन नहीं है।
रोजरियो

19
@ रोगेरियो, मैंने हजारों वर्गों के साथ कई परियोजनाओं पर काम किया है जो इस मॉडल का अनुसरण करते हैं और जब निर्भरता इंजेक्शन सही तरीके से किया जाता है (यदि आप XML कॉन्फ़िगरेशन का उपयोग कर रहे हैं तो आप इसे सही नहीं कर रहे हैं, imho), यह सरल और अपेक्षाकृत दर्द रहित है। दूसरी ओर, मैंने सिस्टम पर काम किया है जो ऐसा नहीं करता है और कक्षाओं के बीच युग्मन हमेशा मुझे महत्वपूर्ण दर्द का कारण बना है। परीक्षण निर्भरता इंजेक्शन का उपयोग करने का कारण नहीं है (हालांकि यह एक बुरा कारण नहीं है)। वास्तविक कारण ढीला युग्मन है। एक ही वर्ग द्वारा लागू किए गए इंटरफेस के कारण मुझे कभी दर्द नहीं हुआ।
जिम कूपर

17
@ जिम, मैं एक महान प्लस के रूप में खराब डिजाइन का परीक्षण करने की क्षमता देखता हूं। एक बेहतर डिजाइन की ओर विरासत कोड को रीफ्रैक्ट करने से पहले जो आप करना चाहते हैं, वह है परीक्षण।
थॉमस मटर्ना

4
मेरा नियम है कि मैं फेक का उपयोग केवल तब करता हूं जब मुझे एक साझा / स्थिर विधि या एक वर्ग को शिम करना पड़ता है जो मेरे पास इंटरफ़ेस को लागू करने के लिए नहीं है। बाकी सब के लिए मैं Moq का उपयोग करता हूं। नकली धीमी होती हैं (क्योंकि नकली असेंबली उत्पन्न करने की आवश्यकता होती है), और यह उस कार्यक्षमता से मेल खाने के लिए अधिक कोडिंग प्रयास करता है जो आपको Moq के साथ मिलता है।
निक

5
@ CarloV.Dango सबसे पहले, मैं पूरी तरह से अच्छी तरह से जानता हूं कि डिपेंडेंसी इंजेक्शन के लिए अलग इंटरफेस की आवश्यकता नहीं है; मेरी पिछली टिप्पणी डीआई का उपयोग करते समय इस तरह के इंटरफेस बनाने की प्रवृत्ति के लिए सिर्फ ललकार रही थी। दूसरे, "आईओसी" (नियंत्रण का उलटा) का डीआई से कोई लेना-देना नहीं है ! (पहला तरीकों के बीच नियंत्रण के प्रवाह के व्युत्क्रम के बारे में है , जबकि दूसरा एक घटक / वस्तु के लिए निर्भरता के संकल्प के बारे में है।) IOC और DI को भ्रमित करके, यह आप है कि अज्ञानता दिखा रहा है, मुझे नहीं; और, स्पष्ट रूप से, यह साइट दूसरों का अपमान करने वाले लोगों के लायक नहीं है, इसलिए कृपया, इसे नागरिक रखने की अनुमति दें।
रोजेरियो

23

आप सही हैं, लेकिन कहानी में कुछ और भी है। इस उत्तर से दूर करने के लिए सबसे महत्वपूर्ण चीजें हैं:

  1. आपकी वास्तुकला को फ़ेक और मॉक के क्रैच पर निर्भर होने के बजाय, स्टब्स और निर्भरता इंजेक्शन का उचित उपयोग करना चाहिए

  2. नकली और नकली परीक्षण कोड के लिए उपयोगी हैं जिन्हें आप बदल सकते हैं या नहीं, जैसे:

    • विरासत कोड जो स्टब्स का उपयोग (या कुशल उपयोग) नहीं करता है
    • 3 पार्टी एपीआई
    • संसाधन जिनके लिए आपके पास कोई स्रोत कोड नहीं है

शिम्स (विकास के दौरान "मोल्स" के रूप में जाना जाता है), वास्तव में एक नकली रूपरेखा है जो अलग-अलग कॉल के माध्यम से संचालित होता है। श्रमसाध्य निर्माण के बजाय एक नकली (हाँ, यहां तक ​​कि Moq का उपयोग अपेक्षाकृत दर्दनाक है!), शिम बस उत्पादन कोड ऑब्जेक्ट का उपयोग पहले से ही कर रहे हैं। शिम केवल उत्पादन लक्ष्य से परीक्षण प्रतिनिधि को कॉल को फिर से रूट करता है।

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

कुशलता से फेक (शिम्स, मोक्स और स्टब प्रकार) को लागू करने में थोड़ा समय लगता है, लेकिन यह प्रयास के लायक है। मैंने व्यक्तिगत रूप से विकास के समय को शम्स / मोल, मोक्स और स्टब प्रकार के उपयोग के माध्यम से बचाया है। मुझे आशा है कि आपके पास तकनीक के साथ उतना ही मज़ा होगा जितना मेरे पास है!


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

1
लेकिन शिम (मोल्स), यानी 3 पार्टी कोड, सिस्टम / एसडीके एपीआई के उपयोग के लिए अच्छा औचित्य जोड़ता है। जब आप अपने इन-हाउस समाधानों के साथ काम कर रहे होते हैं, तो यह नहीं है। इसलिए मैं आपको एक वोट देने के लिए तैयार हूं कि :-)
टोनी वॉल

2
@ माइक और जिम .. मैंने इस उत्तर में प्रयुक्त शब्दावली को ठीक करने का प्रयास किया। कृपया मुझे बताएं कि क्या हम इसे बेहतर बना सकते हैं। धन्यवाद।
स्नेश

15

जैसा कि मैं इसे समझता हूं, विजुअल स्टूडियो टीम .NET के लिए उपलब्ध विभिन्न मॉक लाइब्रेरी के साथ प्रतिस्पर्धा करने से बचना चाहती थी। एमएस अक्सर इस तरह के कठिन फैसलों का सामना करते हैं। यदि वे कुछ कार्यक्षमता प्रदान नहीं करते हैं तो उन्हें नुकसान पहुंचता है ("क्यों एमएस हमें एक नकली पुस्तकालय प्रदान नहीं करता है? नकली ऐसी आम आवश्यकता है?") और शापित अगर वे करते हैं ("तो Microsoft इतनी आक्रामक तरीके से काम क्यों कर रहा है और इसे चला रहा है" बाजार से बाहर प्राकृतिक समर्थक? ") बहुत बार, लेकिन हमेशा नहीं, वे उपलब्ध और अच्छी तरह से प्राप्त प्रौद्योगिकियों के लिए अपना स्वयं का विकल्प प्रदान करने से पीछे हटने का फैसला करते हैं। यहां ऐसा ही प्रतीत होता है।

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


2
फेक फ्रेमवर्क प्रीमियम संस्करण के साथ भी उपलब्ध है।
आल्टरप्रोग्रामग्राम

13

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

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

BTW, यदि आपने पहले मोल्स को आज़माया है, तो फ़ेक अनिवार्य रूप से एक ही चीज़ है, आखिरकार माइक्रोसॉफ्ट रिसर्च और वास्तविक उत्पाद में अपना रास्ता बना रहा है।


1
अपडेट: मोल्स को अब एमएस फेक में एकीकृत किया गया है। "विजुअल स्टूडियो 2012 में फेक फ्रेमवर्क मोल्स एंड स्टब्स की अगली पीढ़ी है। फेक मोल्स से अलग है, हालांकि, मोल्स से फेक तक जाने से आपके कोड में कुछ संशोधनों की आवश्यकता होगी। विजुअल 2012 में मोल्स फ्रेमवर्क का समर्थन नहीं किया जाएगा। । " स्रोत: research.microsoft.com/en-us/projects/moles
Sire

1

नकली (शिम + स्टब) वस्तुओं के बारे में, यह ऊपर अच्छी तरह से परिभाषित किया गया है, हालांकि मुझे लगता है कि अंतिम टिप्पणी में अंतिम पैराग्राफ पूरी स्थिति को बहुत अच्छी तरह से सारांशित करता है।

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

आप शायद प्रो संस्करणों पर फेक (शिम + स्टब) मेनू विकल्प देख सकते हैं, लेकिन खबरदार, कुछ बहुत मजबूत संभावनाएं हैं कि आप पूरी तरह से कुछ भी नहीं खत्म कर देंगे ... यह आपको कोई संकलन त्रुटि उत्पन्न नहीं करेगा जो आपको बताएगा कि कुछ महत्वपूर्ण है गायब है, विकल्प अभी नहीं हैं, इसलिए अपना समय बर्बाद न करें ...

देव टीम में विचार करने के लिए यह एक महत्वपूर्ण कारक है, खासकर अगर कोई एक ही अंतिम संस्करण का उपयोग कर रहा है, जबकि बाकी सभी प्रो संस्करण का उपयोग करते हैं ... दूसरी ओर Moq को आसानी से Nuget के माध्यम से स्थापित किया जा सकता है कोई फर्क नहीं पड़ता कि आप किस विज़ुअल स्टूडियो संस्करण का उपयोग करते हैं। मुझे Moq का उपयोग करने में कोई समस्या नहीं थी, किसी भी उपकरण के साथ कुंजी यह जानना है कि वे क्या उपयोग कर रहे हैं और उन्हें ठीक से कैसे उपयोग करें;)


1
कृपया अपने प्रश्न को छोटे पैराग्राफ में प्रारूपित करें ताकि पढ़ने में आसानी हो।

@SirXamelot, उस कोड को रीक्रिएट नहीं कर रहा है जिसे आप .net का आउटपुट नहीं बदल सकते। बशर्ते स्थिर कॉल जैसे DateTime.Now या Guide.NewGuid
zaitsman
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.