মকিতো: জেনেরিকের সাথে ম্যাচারদের তালিকা করুন


উত্তর:


278

জাভা 8 এবং তারপরের জন্য এটি সহজ:

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

জাভা 7 এবং নীচের জন্য, সংকলকটির কিছুটা সহায়তা দরকার। ব্যবহার anyListOf(Class<T> clazz):

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

16
দ্রষ্টব্য: এটি মকিতো ২. এ অবচয় করা হয়েছে এবং এটি মকিতো ৩ তে সরানো হবে Dep অবনতিযুক্ত কারণ জাভা 8 সংকলক এখন টাইপটি অনুমান করতে পারে।
কিপ

@ আর্টব্রিস্টল আপনি কি জানেন যে কোনও সিট () দিয়ে কোনও লিস্ট () এর মতো কাজ করা উচিত? আমি জাভা 8 এ আছি এবং একটি সতর্কতা এলিপস
আইডিইতে

1
ভাল ব্যবহার করার জন্য anyListOf। যদিও anyListকাজ করে, এটি একটি সতর্কতা প্রকাশ করে।
বল্কি

3
anyListOfহ্রাস করা হয়েছে, সুতরাং এটি ব্যবহার না করাই ভাল। জাভা 8 এর উদাহরণটি মেথড ওভারলোডের ক্ষেত্রে কাজ করে না, উদাহরণস্বরূপ যদি আপনার কাছে 2 টি আলাদা তালিকা গ্রহণ করার পদ্ধতি থাকে: List<DBEntity>এবং List<DTO>আমি ArgumentMatchersজেনেরিক ব্যবহার করে এই সমস্যাটি সমাধান করেছি :when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
এডুফিন

14

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উপরের মতো ব্যবহার করা দরকার ।


4
Matchers.any()খুব সুবিধাজনক!
এমবাচ

ম্যাচার্সকে এখন অবহিত করা হয়েছে, মকিতো থেকে তথ্যটি এখানে "আর্গুমেন্ট ম্যাথার্স ব্যবহার করুন Ham এই শ্রেণিটি এখন হ্যামচেস্ট org.hamcrest.Matchers শ্রেণীর সাথে নামের সংঘাত এড়ানোর জন্য অবচিত করা হয়েছে। সম্ভবত এই শ্রেণিটি 3.0 সংস্করণে সরানো হবে।" static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/…
অদ্ভুত মিটার

@oddmeter পরিবর্তন হয়েছে।
জেফ বোম্যান

5

জাভা 8 এর আগে (সংস্করণ 7 বা 6) আমি নতুন পদ্ধতিটি আর্গুমেন্টম্যাচার্স.নেইলিস্ট ব্যবহার করি:

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

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.