মকিতো অফারগুলি:
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()
প্রয়োগ করবেন না । মকিতো ২.x- any(Foo.class)
তে "যে কোনও instanceof
ফু" বোঝানো হয়েছে , any()
তবুও এর অর্থ "সহ কোনও মান null
"।
উল্লেখ্য: উপরে স্যুইচ করেছে ArgumentMatchers Mockito এর নতুন সংস্করণে, সঙ্গে একটি নাম সংঘর্ষের এড়াতে org.hamcrest.Matchers
। মকিতোর পুরানো সংস্করণগুলিকে org.mockito.Matchers
উপরের মতো ব্যবহার করা দরকার ।
Matchers.any()
খুব সুবিধাজনক!
জাভা 8 এর আগে (সংস্করণ 7 বা 6) আমি নতুন পদ্ধতিটি আর্গুমেন্টম্যাচার্স.নেইলিস্ট ব্যবহার করি:
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());