मैं मॉकिटो के साथ एक ऑब्जेक्ट का मज़ाक उड़ा रहा हूं, इस ऑब्जेक्ट पर एक ही विधि को कई बार कहा जाता है और मैं हर बार एक ही मूल्य वापस करना चाहता हूं।मॉकिटो: एक ही विधि के लिए एकाधिक कॉल
LogEntry entry = null; // this is a field
// This method is called once only.
when(mockLogger.createNewLogEntry()).thenAnswer(new Answer<LogEntry>() {
@Override
public LogEntry answer(InvocationOnMock invocationOnMock) throws Throwable {
entry = new LogEntry();
return entry;
}
});
// This method can be called multiple times,
// If called after createNewLogEntry() - should return initialized entry.
// If called before createNewLogEntry() - should return null.
when(mockLogger.getLogEntry()).thenAnswer(new Answer<LogEntry>() {
@Override
public LogEntry answer(InvocationOnMock invocationOnMock) throws Throwable {
return entry;
}
});
समस्या है, ऐसा लगता है कि मेरी getLogEntry विधि केवल एक बार कहा जाता है:
यह है कि मैं क्या है। बाद के सभी आमंत्रणों के लिए, null
इसके बदले वापस कर दिया गया है और मुझे परीक्षण में एनपीई मिलते हैं।
मैं सभी कॉल के लिए स्टब किए गए संस्करण का उपयोग करने के लिए मॉकिटो कैसे कह सकता हूं?
============================================== ===================
भविष्य की पीढ़ियों के
के लिए पोस्ट मार्टम मैं था कुछ अतिरिक्त जांच और हमेशा की तरह यह नहीं पुस्तकालय की गलती, यह मेरी गलती है । createNewLogEntry()
पर कॉल करने से पहले मेरे कोड में getLogEntry()
नामक विधियों में से एक। एनपीई बिल्कुल वैध था, परीक्षण वास्तव में मेरे कोड में एक बग मिला, मुझे मॉकिटो में बग नहीं मिला।
सुंदर रहस्यमय। यह आम तौर पर काम करना चाहिए। मुझे लगता है कि मैं वहां कुछ प्रश्न फेंक दूंगा: 1) क्या आप निश्चित हैं कि यह प्रविष्टि है जो शून्य है और किसी भी तरह से mockLogger को कहीं भी शून्य पर रीसेट नहीं किया जा रहा है? 2) क्या यह संभव है कि मॉक लॉगर को मॉक किए गए तरीकों के बिना पुनर्निर्मित किया जा रहा है? उपर्युक्त कोड को उन तरीकों से फ्रेम करने में मददगार हो सकता है जो इसे परिभाषित करते हैं (एक टेस्ट विधि बनाम सेटअप)। अंत में, आप वास्तव में निष्पादित किए जा रहे कार्यों के बारे में सुनिश्चित करने के लिए, अपने उत्तर के इम्प्ले (या ब्रेकपॉइंट्स) में एक println आज़मा सकते हैं। –
आपकी समस्या को पुन: उत्पन्न करने का प्रयास किया, एक समान दृष्टिकोण Mockito 1.9.5 ==> का उपयोग कर मेरे लिए काम करता है शायद आप मॉकिटो मेलिंग सूची के माध्यम से पूरे टेस्ट क्लास का कोड भेज सकते हैं? – s106mo