मॉकिटो ऑफर:
when(mock.process(Matchers.any(List.class)));
कैसे चेतावनी से बचने के लिए अगर processएक लेता है List<Bar>बजाय?
मॉकिटो ऑफर:
when(mock.process(Matchers.any(List.class)));
कैसे चेतावनी से बचने के लिए अगर processएक लेता है List<Bar>बजाय?
जवाबों:
जावा 8 और इसके बाद के संस्करण के लिए, यह आसान है:
when(mock.process(Matchers.anyList()));
जावा 7 और नीचे के लिए, कंपाइलर को थोड़ी मदद की ज़रूरत है। उपयोग करें anyListOf(Class<T> clazz):
when(mock.process(Matchers.anyListOf(Bar.class)));
anyListOf। हालांकि anyListकाम करता है, यह एक चेतावनी का उत्सर्जन करता है।
anyListOfपदावनत है, इसलिए इसका उपयोग नहीं करना बेहतर है। जावा 8 के लिए उदाहरण विधि अधिभार के मामले में काम नहीं करता है, उदाहरण के लिए यदि आपके पास 2 अलग-अलग सूचियों को स्वीकार करने की एक विधि है: List<DBEntity>और List<DTO>मैंने ArgumentMatchersजेनेरिक के साथ प्रयोग करके इस समस्या को हल किया है :when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
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को ऊपर के रूप में उपयोग करते रहने की आवश्यकता होगी ।
Matchers.any()बहुत सुविधाजनक है!
जावा 8 (संस्करण 7 या 6) से पहले मैं नई विधि ArgumentMatchers.anyList का उपयोग करता हूं:
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());