মকিতো অফারগুলি:
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());