मैं एक .NET लड़का हूँ - और मैं मुख्य रूप से सी # में कोड।जावा में "स्थैतिक प्रतिबिंब" कैसे काम करता है? (उदा। मॉकिटो या easymock में)
सी # 3.0 के बाद से, हम static reflection का उपयोग करने के लिए लैम्ब्डा अभिव्यक्तियों और अभिव्यक्ति पेड़ों का लाभ उठा सकते हैं। ,
string methodName = GetMethodName(o => o.DoSomething());
Console.WriteLine(methodName); // displays "DoSomething"
अब, जब मैं जावा दुनिया में Mockito नमूने (या EasyMock वाले) को देखो मैं: उदाहरण के लिए, यह निम्नलिखित स्निपेट में GetMethodName
लागू करने के लिए विधि पैरामीटर में पारित के नाम वापस जाने के लिए संभव है देखें:
LinkedList mockedList = mock(LinkedList.class);
when(mockedList.get(0)).thenReturn("first");
यह कैसे काम करता है?
when
विधि कैसे काम करता है? यह mockedList.get(0)
को के रूप में 0 पैरामीटर के रूप में पारित विधि के साथ एक कॉल के रूप में और मूल्य के रूप में नहीं बताता है?
प्रॉक्सी। असली कोडिंग फ्रेमवर्क अपनी कोड पीढ़ी के लिए। –
.NET में, जोरदार टाइपिंग मॉकिंग फ्रेमवर्क अभिव्यक्ति पेड़ (सीएफ। मोक और राइनो मोक्स) और वास्तव में गतिशील प्रॉक्सी का उपयोग करते हैं। लेकिन यहां यह अभी भी अस्पष्ट है कि कैसे (प्रॉक्सी के साथ भी) आप सुरक्षित रूप से नकली सेट कर सकते हैं। क्या होगा यदि मैं टाइप करता हूं "कब (mockedList.get (0) + mockedList.get (2))। फिर वापसी (42)"? –
अभिव्यक्ति के पेड़ों से पहले राइनो मोक्स लंबे समय से अस्तित्व में थे। यह कुछ मामलों में अभिव्यक्ति पेड़ * अब * का उपयोग कर सकता है, लेकिन यह हमेशा * ऐसा नहीं करता है। (यह अभी भी .NET 2.0 में काम करता है।) यदि आप अंतिम के परिणाम को निर्दिष्ट करने से पहले नकली को एक और कॉल करते हैं, तो परिणाम नकली के तरीके पर निर्भर करते हैं। –