दिलचस्प पोस्ट
क्यों OpenFileDialog मेरी कार्यरत निर्देशिका बदलता है? सूची दृश्य (एंड्रॉइड) के लिए एक ऑनक्लिकलिस्टर जोड़ना क्या बीश में एक "गोटो" कथन है? दो संबंधित एरेज़ को छंटनी फ़ोल्डर्स की तारीख- उसके बाद- (सीएमडी फाइल में डेट कैल्श) क्यों रेल डिफ़ॉल्ट_scope का उपयोग अक्सर के खिलाफ सिफारिश कर रहे हैं? जावा एफएक्स जीयूआई डिजाइन में पर्यवेक्षक पैटर्न का इस्तेमाल करना प्रक्रिया आईडी से प्रक्रिया नाम प्राप्त करें (win32) Symfony2 और सिद्धांत का उपयोग कर मौजूदा डेटाबेस से एक एकल इकाई उत्पन्न करना file.delete () भले ही file.exists (), file.canRead (), file.canWrite (), file.canExecute () सभी रिटर्न सच भी गलत रिटर्न क्या कोई एओआईएसक्यूएल डाटा स्टोर है जो एसिड के अनुरूप है? jQuery: अजाक्स के माध्यम से मॉडेल संवाद सामग्री लोड करें विंडोज सेवा और एसक्यूएल सर्वर का उपयोग कर वनवे डब्लूसीएफ संदेश में कतारबद्ध आइटम को सूची दृश्य स्नैप करें सिस्टम डिफ़ॉल्ट यूटीएफ -8 में लोकेल सेट करें

एकाधिक तर्कों के साथ एक ही विधि के साथ एक ही तर्क के साथ Mockito का उपयोग करना

क्या एक स्टबर्ड विधि के बाद के इनवोकेशंस पर विभिन्न ऑब्जेक्ट्स वापस करने का कोई तरीका है? मैं एक ExecutorCompletionService से अनिश्चित प्रतिक्रियाओं का परीक्षण करने के लिए ऐसा करना चाहता हूं। यानी यह जांचने के लिए कि तरीकों के बदले आदेश के बावजूद, परिणाम निरंतर बने रहे।

मैं परीक्षण करने के लिए देख रहा हूँ कोड इस तरह से कुछ दिखता है

 // Create an completion service so we can group these tasks together ExecutorCompletionService<T> completionService = new ExecutorCompletionService<T>(service); // Add all these tasks to the completion service for (Callable<T> t : ts) completionService.submit(request); // As an when each call finished, add it to the response set. for (int i = 0; i < calls.size(); i ++) { try { T t = completionService.take().get(); // do some stuff that I want to test } catch (...) { } } 

Solutions Collecting From Web of "एकाधिक तर्कों के साथ एक ही विधि के साथ एक ही तर्क के साथ Mockito का उपयोग करना"

आप ऐसा कर सकते हैं कि फिर से thenAnswer विधि का उपयोग करते समय (जब से चेन when ):

 when(someMock.someMethod()).thenAnswer(new Answer() { private int count = 0; public Object answer(InvocationOnMock invocation) { if (count++ == 1) return 1; return 2; } }); 

या बराबर, स्थैतिक doAnswer विधि का उपयोग कर:

 doAnswer(new Answer() { private int count = 0; public Object answer(InvocationOnMock invocation) { if (count++ == 1) return 1; return 2; } }).when(someMock).someMethod(); 

कैसा रहेगा

 when( method-call ).thenReturn( value1, value2, value3 ); 

आप फिर से वापसी के ब्रैकेट्स में जितनी पसंद करते हैं, उतने बहस डाल सकते हैं, बशर्ते वे सभी सही प्रकार हों। पहला मान पहली बार विधि को बुलाया जाएगा, फिर दूसरा जवाब, और इसी तरह। अन्य सभी मूल्यों का उपयोग करने के बाद अंतिम मूल्य बार-बार वापस किया जाएगा

जैसा कि पहले बताया गया है कि लगभग सभी कॉल श्रृंखलाबद्ध हैं।

तो आप कॉल कर सकते हैं

 when(mock.method()).thenReturn(foo).thenReturn(bar).thenThrow(new Exception("test")); //OR if you're mocking a void method and/or using spy instead of mock doReturn(foo).doReturn(bar).doThrow(new Exception("Test").when(mock).method(); 

Mockito के Documenation में अधिक जानकारी

आप यह भी कर सकते हैं श्रृंखला doReturn() विधि invocations इस तरह से

 doReturn(null).doReturn(anotherInstance).when(mock).method(); 

प्यारा नहीं है 🙂

मैंने एक MultipleAnswer वर्ग को लागू किया है जो मुझे प्रत्येक कॉल में अलग-अलग जवाब देने में मदद करता है। यहां कोड का टुकड़ा:

 private final class MultipleAnswer<T> implements Answer<T> { private final ArrayList<Answer<T>> mAnswers; MultipleAnswer(Answer<T>... answer) { mAnswers = new ArrayList<>(); mAnswers.addAll(Arrays.asList(answer)); } @Override public T answer(InvocationOnMock invocation) throws Throwable { return mAnswers.remove(0).answer(invocation); } } 

विभिन्न विधि कॉलों पर विभिन्न तर्क वापस करने के लिए निम्नलिखित सामान्य विधि के रूप में उपयोग किया जा सकता है। हमें केवल एक चीज की ज़रूरत है, ताकि हमें प्रत्येक सर में ऑब्जेक्ट को पुनः प्राप्त करने के क्रम में सरणी देनी होगी।

 @SafeVarargs public static <Mock> Answer<Mock> getAnswerForSubsequentCalls(final Mock... mockArr) { return new Answer<Mock>() { private int count=0, size=mockArr.length; public Mock answer(InvocationOnMock invocation) throws throwable { Mock mock = null; for(; count<size && mock==null; count++){ mock = mockArr[count]; } return mock; } } } 

पूर्व। getAnswerForSubsequentCalls(mock1, mock3, mock2); पहली कॉल पर मॉक 1 ऑब्जेक्ट वापस लाएगा, तीसरे कॉल पर दूसरे कॉल और मॉक 2 ऑब्जेक्ट पर मॉक 3 ऑब्जेक्ट। when(something()).doAnswer(getAnswerForSubsequentCalls(mock1, mock3, mock2)); तरह इस्तेमाल किया जाना चाहिए when(something()).doAnswer(getAnswerForSubsequentCalls(mock1, mock3, mock2)); यह लगभग समान है when(something()).thenReturn(mock1, mock3, mock2);