জাভা যাচাই শূন্য পদ্ধতিতে মকিতোর সাথে n বার কল করে


140

আমি যাচাই করার চেষ্টা করছি যে ডিএও-র অভ্যন্তরে একটি (অকার্যকর) পদ্ধতি আহ্বান করা হচ্ছে - আমি একটি প্রতিশ্রুতিবদ্ধ পয়েন্ট ব্যবহার করছি যা সেই পয়েন্ট অবধি ফলাফলের একটি তালিকা প্রেরণ করে, তালিকাটি পুনরায় সেট করে এবং চালিয়ে যায়। বলুন তালিকায় আমার 4 টি জিনিস রয়েছে এবং আমার 1 এর প্রতিশ্রুতি আছে, আমি "পাঠান" পদ্ধতিটি 4 বার কল করার আশা করব। আমি যাচাই করতে পারি যে লেখার মাধ্যমে পদ্ধতিটি একবার কল হয়েছিল

Mockito.verify(mock).send()

এটি কেটে যায় .. তবে আমি যতবার ফোন করা হয়েছিল তা যাচাই করতে চাই। আমি এটা ভাবব

Mockito.verify(mock.send(), times(4))

যথেষ্ট হবে, তবে এটি বলে যে প্যারামিটারগুলি যাচাই করার জন্য সঠিক নয়।

ঘটনাচক্রে, আমি যদি পরিবর্তন Mockito.verify(mock).send()করি Mockito.verify(mock.send())বা Mockito.verify((mock).send())আমি একই ত্রুটি পাই। এ নিয়ে ভাবনা?


10
ব্যবহার করে দেখুন Mockito.verify(mock, times(4)).send()। আমি অবাক হয়েছি কেন আপনি send()পদ্ধতির কলটির ভিতরে পদ্ধতির কলটি "সরিয়ে নিয়েছেন" verify। আপনার কাছে ইতিমধ্যে সঠিক বাক্য গঠন রয়েছে।
টম


আরও মনে রাখবেন যে আপনি যদি কতবার কতবার ডাকা হয় verify(mock, atLeastOnce()).send();
দাউদ ইবনে করিম

আপনাকে ধন্যবাদ, এটা সঠিক। যা আমি বিভ্রান্তিকর দেখতে পেয়েছি তা Mockito.verify(mock).send()পেরিয়ে গেছে তবে কেবল এটি encapsulating এর ফলে একটি ত্রুটি হয়েছিল, যা কিছুই পরিবর্তন করে না। তবে, এটি একটি জয়!
এনবিপিথ

উত্তর:


237

প্রয়োজনীয় পদ্ধতিটি হ'ল মকিতো # যাচাই করুন :

public static <T> T verify(T mock,
                           VerificationMode mode)

mockআপনার উপহাসকৃত বস্তু এবং modeএটি VerificationModeযা মক কীভাবে যাচাই করা উচিত তা বর্ণনা করে। সম্ভাব্য মোডগুলি হ'ল :

verify(mock, times(5)).someMethod("was called five times");
verify(mock, never()).someMethod("was never called");
verify(mock, atLeastOnce()).someMethod("was called at least once");
verify(mock, atLeast(2)).someMethod("was called at least twice");
verify(mock, atMost(3)).someMethod("was called at most 3 times");
verify(mock, atLeast(0)).someMethod("was called any number of times"); // useful with captors
verify(mock, only()).someMethod("no other method has been called on the mock");

পদ্ধতি এবং এই যাচাইকরণের পদ্ধতিগুলি Mockitoব্যবহার করার জন্য আপনার ক্লাস থেকে এই স্থিতিশীল আমদানিগুলির প্রয়োজন হবে verify:

import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.only;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

সুতরাং আপনার ক্ষেত্রে সঠিক বাক্য গঠনটি হ'ল:

Mockito.verify(mock, times(4)).send()

এই যাচাই করে জানাচ্ছেন যে পদ্ধতি sendবলা হয় 4 ব্যঙ্গ বস্তুর উপর বার। এটি ব্যর্থ হবে যদি 4 বারের বেশি বা বেশি বলা হয়।


আপনি যদি কেবল পরীক্ষা করতে চান, যদি পদ্ধতিটি একবার কল করা হয়, তবে আপনাকে পাস করার দরকার নেই VerificationMode। সাধারন

verify(mock).someMethod("was called once");

যথেষ্ট হবে। এটি অভ্যন্তরীণভাবে ব্যবহার করে verify(mock, times(1)).someMethod("was called once");


"মধ্যবর্তী" যাচাইকরণের জন্য একই উপহাসে একাধিক যাচাইকরণ কল করা সম্ভব। মকিতো এ জাতীয় কিছু সমর্থন করে না verify(mock, between(4,6)).someMethod("was called between 4 and 6 times");, তবে আমরা লিখতে পারি

verify(mock, atLeast(4)).someMethod("was called at least four times ...");
verify(mock, atMost(6)).someMethod("... and not more than six times");

পরিবর্তে, একই আচরণ পেতে। সীমা অন্তর্ভুক্ত করা হয় , সুতরাং পরীক্ষার ক্ষেত্রে সবুজ হয় যখন পদ্ধতিটি 4, 5 বা 6 বার বলা হয়েছিল।


1
VerificationModeপদ্ধতিগুলি (স্থির আমদানি বা সুস্পষ্ট রেফারেন্সের জন্য) কোথায় রয়েছে তা সন্ধানের জন্য, তারা এতে রয়েছে org.mockito.internal.verification.VerificationModeFactory
স্টিভ চেম্বারস

verify(mock, atLeast(0)).someMethod("was called any number of times");কল ভেরিফিকেশন উপেক্ষা করার জন্য সহায়ক ছিল
tj-recess

2
verify(between(m,n))এম এবং এন এর মধ্যে কলগুলির সংখ্যা যাচাই করে এমন কিছু আছে কি?
নিশান্ত

2
@nishant না, Mockito সমর্থন বলে মনে হচ্ছে না, কিন্তু আপনি কল করতে পারেন verifyসঙ্গে বার atLeast(M)এবং atMost(n)একই আচরণ জন্য। আমি উত্তরটি সম্পাদনা করেছি যা ব্যাখ্যা করে।
টম

@ কেভিনওয়াকার আপনি ঠিক বলেছেন, আমি এ সম্পর্কিত তথ্য সরিয়েছি VerificationModeFactory। এটি এখনও নতুন সংস্করণে উপলভ্য, তবে আমি সম্মত হই যে অভ্যন্তরীণ ক্লাসগুলি ব্যবহার করা উচিত নয়।
টম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.