टॉमसज़ नुर्कविचज़ का उत्तर पूरी कहानी नहीं बताना प्रतीत होता है!
एनबी मॉकिटो संस्करण: 1.10.1 9।
मैं बहुत अधिक मॉकिटो न्यूब हूं, इसलिए निम्न व्यवहार की व्याख्या नहीं कर सकता: यदि कोई विशेषज्ञ है जो इस उत्तर को बेहतर बना सकता है, तो कृपया बेझिझक महसूस करें।
प्रश्न में विधि यहाँ, getContentStringValue
, नहींfinal
और नहींstatic
है।
इस लाइन मूल विधि getContentStringValue
फोन करता है:
doReturn("dummy").when(im).getContentStringValue(anyInt(), isA(ScoreDoc.class));
इस लाइन नहीं है कॉल मूल विधि getContentStringValue
:
doReturn("dummy").when(im).getContentStringValue(anyInt(), any(ScoreDoc.class));
कारण जो मैं उत्तर नहीं दे सकता के लिए, isA()
का उपयोग करने के लिए doReturn
के इरादे (?) "विधि को कॉल न करें" व्यवहार का कारण बनता है।
आइए यहां शामिल विधि हस्ताक्षर देखें: वे Matchers
दोनों विधियां हैं। जावाडोक द्वारा दोनों को null
लौटने के लिए कहा जाता है, जो आपके सिर को अपने आप में लाने में थोड़ा मुश्किल है। संभावित रूप से Class
ऑब्जेक्ट पास किया गया है क्योंकि पैरामीटर की जांच की गई है लेकिन परिणाम या तो कभी गणना या त्याग नहीं किया गया है। यह देखते हुए कि null
किसी भी वर्ग के लिए खड़ा हो सकता है और आप मॉक किए गए विधि को कॉल नहीं करने की उम्मीद कर रहे हैं, isA(...)
और any(...)
के हस्ताक्षर नहीं हो सकते हैं, केवल सामान्य पैरामीटर * <T>
के बजाय null
लौटाएं?
वैसे भी
:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
API दस्तावेज़ इस बारे में कोई सुराग नहीं देता है। ऐसा लगता है कि इस तरह की "कॉल विधि नहीं" व्यवहार की आवश्यकता "बहुत दुर्लभ" है। निजी तौर पर मैं इस तकनीक का उपयोग हर समय: आम तौर पर मुझे लगता है कि मॉकिंग में कुछ पंक्तियां शामिल हैं जो "दृश्य सेट करें" ... उसके बाद एक विधि को कॉल करके जो आपके द्वारा आयोजित किए गए नकली संदर्भ में दृश्य को "नाटक" करती है ... और जब आप दृश्यों की स्थापना कर रहे हैं और समर्थक आखिरी चीज चाहते हैं तो कलाकारों के लिए मंच छोड़ने के लिए और उनके दिल को अभिनय करना शुरू करें ...
लेकिन यह मेरे वेतन ग्रेड से परे है .. मैं किसी भी गुजरने वाले मॉकिटो उच्च पुजारी से स्पष्टीकरण आमंत्रित करता हूं ...
* सही शब्द "जेनेरिक पैरामीटर" है?
क्या होगा यदि मैं इस विधि का उपयोग और अपने मूल एक अभी भी बुलाया जा रहा है? क्या पैरामीटर के साथ समस्या हो सकती है? यहाँ पूरे परीक्षण है: http://pastebin.com/ZieY790P 'send' विधि –
@EvgeniPetrov बुलाया जा रहा है, तो अपने मूल पद्धति अभी भी बुलाया जा रहा है यह शायद इसलिए है क्योंकि अपने मूल विधि अंतिम है। मॉकिटो अंतिम तरीकों का नकल नहीं करता है, और अंतिम तरीकों के मज़ाक के बारे में आपको चेतावनी नहीं दे सकता है। – MarcG
क्या यह doThrow() के लिए भी संभव है? – Gobliins