संक्षिप्त उत्तर यह है कि आपके उदाहरण में, परिणाम का mock.method()
प्रकार एक उपयुक्त उपयुक्त रिक्त मान होगा; मॉकिटो अप्रत्यक्ष रूप से प्रॉक्सिमिंग, विधि अवरोधन और MockingProgress
कक्षा के साझा उदाहरण के माध्यम से यह निर्धारित करने के लिए उपयोग करता है कि मॉक पर किसी विधि का आह्वान स्टबिंग या मौजूदा स्टब्ड व्यवहार के पुनरावृत्ति के लिए है, बजाय वापसी के मूल्य के बारे में स्टबिंग से गुजरने के लिए एक मजाकिया तरीका।
मॉकिटो कोड को देखने वाले कुछ मिनटों में एक मिनी-विश्लेषण इस प्रकार है। ध्यान दें, यह एक बहुत ही मोटा विवरण है - यहां खेलने के लिए बहुत सारे विवरण हैं। मेरा सुझाव है कि आप स्वयं गीथूब पर स्रोत की जाँच करें।
सबसे पहले, जब आप क्लास के mock
तरीके का उपयोग करके क्लास का मजाक उड़ाते हैं, तो Mockito
अनिवार्य रूप से यही होता है:
Mockito.mock
org.mockito.internal.MockitoCore
एक पैरामीटर के रूप में डिफ़ॉल्ट मॉक सेटिंग्स को पारित करने के लिए .mock को दर्शाता है।
MockitoCore.mock
प्रतिनिधियों को org.mockito.internal.util.MockUtil
.createMock
MockUtil
क्लास का उपयोग ClassPathLoader
का एक उदाहरण प्राप्त करने के लिए वर्ग MockMaker
नकली बनाने के लिए उपयोग करने के लिए। डिफ़ॉल्ट रूप से, CgLibMockMaker वर्ग का उपयोग किया जाता है।
CgLibMockMaker
JMock से उधार ली गई एक क्लास का उपयोग करता है, ClassImposterizer
जो मॉक बनाने का काम करता है। 'Mockito जादू' का इस्तेमाल किया के प्रमुख टुकड़े कर रहे हैं MethodInterceptor
mockito: नकली बनाने के लिए इस्तेमाल 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
उदाहरण पर बुलाया जाता है ।