मॉकिटो: सूची मिलान जेनेरिक के साथ


जवाबों:


279

जावा 8 और इसके बाद के संस्करण के लिए, यह आसान है:

when(mock.process(Matchers.anyList()));

जावा 7 और नीचे के लिए, कंपाइलर को थोड़ी मदद की ज़रूरत है। उपयोग करें anyListOf(Class<T> clazz):

when(mock.process(Matchers.anyListOf(Bar.class)));

16
नोट: यह मॉकिटो 2. * में पदावनत है और मॉकिटो 3 में हटा दिया जाएगा। डिप्रेकेटेड क्योंकि जावा 8 कंपाइलर अब टाइप कर सकता है।
किप

@ कार्टब्रिस्ट क्या आप जानते हैं कि अगर किसी के साथ भी () को किसी भी तरह से काम करना चाहिए? मैं जावा 8 में हूं और ग्रहण आईडीई में एक चेतावनी दी गई है
फर्नांडो फ्रैड्रेडा

1
उपयोग करने के लिए बेहतर है anyListOf। हालांकि anyListकाम करता है, यह एक चेतावनी का उत्सर्जन करता है।
बाल्की

3
anyListOfपदावनत है, इसलिए इसका उपयोग नहीं करना बेहतर है। जावा 8 के लिए उदाहरण विधि अधिभार के मामले में काम नहीं करता है, उदाहरण के लिए यदि आपके पास 2 अलग-अलग सूचियों को स्वीकार करने की एक विधि है: List<DBEntity>और List<DTO>मैंने ArgumentMatchersजेनेरिक के साथ प्रयोग करके इस समस्या को हल किया है :when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
edufinn

14

anyListOfउपरोक्त के अलावा , आप हमेशा इस सिंटैक्स का उपयोग करके स्पष्ट रूप से जेनरिक निर्दिष्ट कर सकते हैं:

when(mock.process(Matchers.<List<Bar>>any(List.class)));

जावा 8 नए मापदंडों के आधार पर प्रकार की अनुमान लगाने की अनुमति देता है, इसलिए यदि आप जावा 8 का उपयोग कर रहे हैं, तो यह भी काम कर सकता है:

when(mock.process(Matchers.any()));

याद रखें कि न तो any()है और न ही anyList()प्रकार या अशक्त चेकों सहित किसी भी जांच, लागू होंगे। मॉकिटो 2.x में, any(Foo.class)"किसी भी instanceofफू" का अर्थ बदल दिया गया था , लेकिन फिर any()भी "किसी भी मूल्य सहित null" का अर्थ है ।

ध्यान दें: ऊपर एक नाम टकराव से बचने के लिए, मॉकिटो के नए संस्करणों में ArgumentMatchers पर स्विच किया गया है org.hamcrest.Matchers। मॉकिटो के पुराने संस्करणों org.mockito.Matchersको ऊपर के रूप में उपयोग करते रहने की आवश्यकता होगी ।


4
Matchers.any()बहुत सुविधाजनक है!
MBach

मैचर्स अब पदावनत हो गए हैं, यहाँ mockito से जानकारी है "ArgumentMatchers का उपयोग करें। Hamcrest org.hamcrest.Matchers वर्ग के साथ एक नाम के टकराव से बचने के लिए इस वर्ग को अब हटा दिया गया है। संभवतः यह वर्जन 3.0 संस्करण में हटा दिया जाएगा।" static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/…
oddmeter

@oddmeter परिवर्तन किए गए।
जेफ बोमन

5

जावा 8 (संस्करण 7 या 6) से पहले मैं नई विधि ArgumentMatchers.anyList का उपयोग करता हूं:

import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.