मजाक चौखटे मुद्दा यह है कि वे कार्यात्मक रूप में माना जा सकता करने के लिए mocks की अवधारणाओं & स्टब्स करीब & करीब ला रहे हैं एक साथ बहुत सारे लगभग एक जैसा।
- नकली: एक वैचारिक परिप्रेक्ष्य तथापि से, मैं आमतौर पर इस सम्मेलन पालन करने की कोशिश केवल जब आप स्पष्ट रूप से परीक्षण के अंतर्गत वस्तु के व्यवहार को सत्यापित करने के लिए कोशिश कर रहे हैं (यानी अपने परीक्षण कह रही है कि इस वस्तु को कॉल करना होगा वह वस्तु)।
- स्टब: जब आप कुछ कार्यक्षमता/व्यवहार का परीक्षण करने की कोशिश कर रहे हैं, लेकिन काम करने के लिए आपको कुछ बाहरी वस्तुओं पर भरोसा करना होगा (यानी आपका परीक्षण कह रहा है कि इस वस्तु को कुछ करना चाहिए, लेकिन एक तरफ प्रभाव, यह उस ऑब्जेक्ट को कॉल कर सकता है)
यह स्पष्ट हो जाता है जब आप सुनिश्चित करते हैं कि आपके प्रत्येक इकाई परीक्षण केवल एक चीज का परीक्षण करते हैं। निश्चित रूप से यदि आप एक परीक्षण में सब कुछ परीक्षण करने का प्रयास करते हैं तो आप सबकुछ की उम्मीद कर सकते हैं। लेकिन केवल उन चीजों की अपेक्षा करके जो विशिष्ट इकाई परीक्षण की जांच कर रहे हैं, आपका कोड बहुत स्पष्ट है क्योंकि आप एक नज़र में देख सकते हैं कि परीक्षण का उद्देश्य क्या है।
इसका एक अन्य लाभ यह है कि आप परिवर्तन से थोड़ा अधिक इन्सुलेट हो जाएंगे & जब कोई परिवर्तन ब्रेक का कारण बनता है तो बेहतर त्रुटि संदेश प्राप्त होता है। दूसरे शब्दों में यदि आप अपने कार्यान्वयन के कुछ हिस्सों को बदलते हैं, तो आपको केवल एक परीक्षण केस तोड़ने की अधिक संभावना होती है, जो आपको & तोड़ने वाले परीक्षणों के पूरे सूट के बजाए बिल्कुल सही दिखाएगा, जो सिर्फ शोर बना रहा है।
संपादित: यह एक काल्पनिक उदाहरण के आधार पर स्पष्ट हो सकता है, जहां एक कैलकुलेटर वस्तु एक डेटाबेस के लिए सभी अतिरिक्त ऑडिट (छद्म कोड में) ...
public void CalculateShouldAddTwoNumbersCorrectly() {
var auditDB = //Get mock object of Audit DB
//Stub out the audit functionality...
var calculator = new Calculator(auditDB);
int result = calculator.Add(1, 2);
//assert that result is 3
}
public void CalculateShouldAuditAddsToTheDatabase() {
var auditDB = //Get mock object of Audit DB
//Expect the audit functionality...
var calculator = new Calculator(auditDB);
int result = calculator.Add(1, 2);
//verify that the audit was performed.
}
पहला परीक्षण मामले में
तो हम Add
विधि & की कार्यक्षमता का परीक्षण कर रहे हैं, इस पर ध्यान न दें कि कोई ऑडिट ईवेंट होता है या नहीं, लेकिन हमें पता चल जाता है कि कैलकुलेटर ऑडिट डीबी संदर्भ के साथ काम नहीं करेगा, इसलिए हम इसे न्यूनतम करने के लिए बस इसे बाहर निकाल दें हमारे विशिष्ट परीक्षण मामले काम करने के लिए कार्यक्षमता की।दूसरे परीक्षण में हम विशेष रूप से परीक्षण कर रहे हैं कि जब आप Add
करते हैं, तो ऑडिट ईवेंट होता है, इसलिए यहां हम अपेक्षाओं का उपयोग करते हैं (ध्यान दें कि हम नतीजे भी नहीं देखते हैं कि परिणाम क्या है, क्योंकि यह हम परीक्षण नहीं कर रहे हैं)।
हाँ आप दोनों मामलों को एक, & में जोड़ सकते हैं और उम्मीद करते हैं कि आपका परिणाम 3 है, लेकिन फिर आप एक इकाई परीक्षण में दो मामलों का परीक्षण कर रहे हैं। इससे आपके परीक्षण अधिक भंगुर हो जाएंगे (क्योंकि चीजों का एक बड़ा सतह क्षेत्र परीक्षण को तोड़ने के लिए बदल सकता है) और कम स्पष्ट (जब विलय परीक्षण विफल रहता है तो यह तुरंत स्पष्ट नहीं होता कि समस्या क्या है .. क्या अतिरिक्त काम नहीं कर रहा है, या ऑडिट काम नहीं कर रहा है?)
उम्मीद कुछ भी वापस नहीं लौटाएगी, जबकि स्टब आपके द्वारा निर्दिष्ट किए गए कार्यों को वापस कर देगा। एक अच्छा उपयोग केस के लिए – zinking