मेरी टीम ने हाल ही में मोक का उपयोग अपने जबरदस्त लचीलापन और अत्यधिक पठनीय वाक्यविन्यास के लिए हमारे मॉकिंग फ्रेमवर्क के रूप में करने का निर्णय लिया है। जैसा कि हम इसके लिए नए हैं, मैं सरल प्रश्नों के बारे में सोच रहा हूं - खोज (यहां, Google, इत्यादि) मोक के अन्य नतीजों पर बहुत सी चर्चाएं पाती हैं, लेकिन जरूरी नहीं कि मैं क्या कर रहा हूं, और कुछ प्रतीत होता है संबंधित प्रश्न लाल हेरिंग में बदल गए हैं।मोक के साथ "लघु सर्किटिंग" शून्य विधियां?
हम एक ऐसे वर्ग का परीक्षण कर रहे हैं जिसमें बाहरी निर्भरता है (अमेज़ॅन सरल डीबी सटीक होना चाहिए) लेकिन नहीं चाहते कि हमारे परीक्षण लाइव कनेक्शन से जुड़े हों। एक विशेष विधि:
- , कुछ "व्यापार" तर्क
- तो उचित लागू होता है एक प्रदाता हम का निर्माण किया है के माध्यम से SDB के लिए बाहर एक कॉल का आह्वान, चलो इसे कहते
SaveItem()
मैं इकाई करना चाहते हैं इस तरह परीक्षण करें कि हम आवश्यक संदर्भ स्थापित करते हैं और बीमा करते हैं कि SaveItem()
का आह्वान किया गया था, लेकिन इस तरह से SaveItem()
वास्तव में नहीं बुलाया जाता है (क्योंकि ए) एसडीबी के लिए प्रदाता एक नकली है जो पूरी तरह से हाइड्रेटेड नहीं है और संभवतः बम और बी) मैं उस लेनदेन के लिए सैकड़ों और हजारों बार भुगतान नहीं करना चाहता)।
एक मूल्य लौटाए गए तरीकों से निपटने पर, यह मामूली था।
mockDb.Setup(d => d.GiveMeSomething()).Returns("Foo");
मामले कि मैं ही उपरोक्त रूपरेखा में, मेरा "SaveItem()
" विधि शून्य है और इसलिए विकल्प Moq के Returns()
विधि का उपयोग करने के लिए है उपलब्ध नहीं है। और जब मैं SaveItem()
को सत्यापित करने के लिए कॉलबैक सेट कर सकता हूं, तो मुझे लगता है कि वास्तव में कुछ भी नहीं करने के लिए मुझे लगता है।
अनुभवहीन/उम्मीद है, मैंने सोचा निम्नलिखित काम करेगा, लेकिन यह अभी भी विधि आह्वान करने के लिए प्रकट होता है:
mockDb.Setup(d => d.SaveItem(It.IsAny<object>()));
तो मिलियन डॉलर सवाल: निम्न काल्पनिक कोड की MOQ क्या है?
mockDb.Setup(d => d.SaveItem(It.IsAny<object>())).STOP_RIGHT_HERE();
संपादित स्थिति स्पष्ट करने, परीक्षण एक "व्यापार" वर्ग के आसपास चल, वास्तविक SimpleDB कार्यान्वयन के लिए नहीं करने के लिए है। सरल डीबी कार्यान्वयन का परीक्षण कहीं और किया जाता है, यह वही है जो मैं मजाक कर रहा हूं। – bakasan