संक्षिप्त उत्तर यह है कि आपके उदाहरण में, परिणाम का mock.method()प्रकार एक उपयुक्त उपयुक्त रिक्त मान होगा; मॉकिटो अप्रत्यक्ष रूप से प्रॉक्सिमिंग, विधि अवरोधन और MockingProgressकक्षा के साझा उदाहरण के माध्यम से यह निर्धारित करने के लिए उपयोग करता है कि मॉक पर किसी विधि का आह्वान स्टबिंग या मौजूदा स्टब्ड व्यवहार के पुनरावृत्ति के लिए है, बजाय वापसी के मूल्य के बारे में स्टबिंग से गुजरने के लिए एक मजाकिया तरीका।
मॉकिटो कोड को देखने वाले कुछ मिनटों में एक मिनी-विश्लेषण इस प्रकार है। ध्यान दें, यह एक बहुत ही मोटा विवरण है - यहां खेलने के लिए बहुत सारे विवरण हैं। मेरा सुझाव है कि आप स्वयं गीथूब पर स्रोत की जाँच करें।
सबसे पहले, जब आप क्लास के mockतरीके का उपयोग करके क्लास का मजाक उड़ाते हैं, तो Mockitoअनिवार्य रूप से यही होता है:
Mockito.mockorg.mockito.internal.MockitoCoreएक पैरामीटर के रूप में डिफ़ॉल्ट मॉक सेटिंग्स को पारित करने के लिए .mock को दर्शाता है।
MockitoCore.mockप्रतिनिधियों को org.mockito.internal.util.MockUtil.createMock
MockUtilक्लास का उपयोग ClassPathLoaderका एक उदाहरण प्राप्त करने के लिए वर्ग MockMakerनकली बनाने के लिए उपयोग करने के लिए। डिफ़ॉल्ट रूप से, CgLibMockMaker वर्ग का उपयोग किया जाता है।
CgLibMockMakerJMock से उधार ली गई एक क्लास का उपयोग करता है, ClassImposterizerजो मॉक बनाने का काम करता है। 'Mockito जादू' का इस्तेमाल किया के प्रमुख टुकड़े कर रहे हैं MethodInterceptormockito: नकली बनाने के लिए इस्तेमाल MethodInterceptorFilter, और का एक उदाहरण सहित MockHandler उदाहरणों की शृंखला MockHandlerImpl । विधि इंटरसेप्टर मॉकहैंडलरइम्पल उदाहरण के लिए इनवोकेशन पास करता है, जो कि बिजनेस लॉजिक को लागू करता है, जिसे एक मॉक पर मंगाने पर लागू किया जाना चाहिए (यानी, यह देखने के लिए कि क्या जवाब पहले से रिकॉर्ड किया गया है, यह निर्धारित करते हुए कि इन्वोकेशन नए स्टब का प्रतिनिधित्व करता है, आदि। डिफ़ॉल्ट स्थिति यह है कि यदि एक स्टब पहले से ही लागू होने वाली विधि के लिए पंजीकृत नहीं है, तो एक प्रकार का उपयुक्त खाली मान वापस किया जाता है।
अब, अपने उदाहरण में कोड को देखें:
when(mock.method()).thenReturn(someValue)
यहां यह आदेश दिया गया है कि यह कोड इस पर अमल करेगा:
mock.method()
when(<result of step 1>)
<result of step 2>.thenReturn
यह समझने की कुंजी है कि मॉक पर विधि लागू होने पर क्या होता है: विधि इंटरसेप्टर को विधि मंगलाचरण के बारे में जानकारी दी जाती है, और इसके MockHandlerउदाहरणों की श्रृंखला को सौंपता है, जो अंततः प्रतिनिधि को सौंपता है MockHandlerImpl#handle। इस दौरान MockHandlerImpl#handle, मॉक हैंडलर एक इंस्टेंस बनाता है OngoingStubbingImplऔर इसे साझा MockingProgressइंस्टेंस पर भेजता है।
जब whenआह्वान के बाद विधि का इस्तेमाल किया जाता है method(), तो यह उसी वर्ग MockitoCore.whenकी stub()पद्धति को बुलाता है । यह विधि साझा किए गए MockingProgressइंस्टेंस से चल रहे स्टबिंग को अनपैक करती है जिसे मॉकडाउन method()इनवोकेशन में लिखा गया है, और इसे वापस लौटाता है। फिर thenReturnविधि को फिर OngoingStubbingउदाहरण पर बुलाया जाता है ।