मॉकिटो ऑफर:
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());