5.1 যাচাই() পদ্ধতি
ভার্চুয়াল অবজেক্ট তৈরি করার পাশাপাশি, আরেকটি আকর্ষণীয় কাজ প্রায়শই দেখা দেয় - পরীক্ষার অধীনে ক্লাসটি সঠিক বস্তুর সঠিক পদ্ধতিগুলিকে কল করে তা নিশ্চিত করা। তদুপরি, তিনি সঠিক পরামিতি সহ প্রয়োজনীয় সংখ্যক বার কল করেছিলেন এবং এর মতো।
এর জন্য, মকিটোরও কিছু জাদু আছে - পদ্ধতির একটি পরিবার Mockito.verify(…)
। সাধারণ নিয়ম যা পদ্ধতি কল চেকিং নির্দিষ্ট করে তা হল:
Mockito.verify(an object).method name(parameter);
উদাহরণ:
@ExtendWith(MockitoExtension.class)
class VerifyTest {
@Mock
List<String> mockList;
@Test
public void whenMockAnnotation() {
//method call
String name = mockList.get(10);
// check if the method was called
Mockito.verify(mockList).get(10);
}
}
মেথড কলের সময়, verify()
আমরা নিয়ম সেট করি যে mockitoList
প্যারামিটার 10 সহ মেথডটিকে অবজেক্টে কল করা উচিত get()
।
5.2 কলের সংখ্যা চেক করার সাথে যাচাই() পদ্ধতি
কখনও কখনও আরও জটিল যাচাইকরণের পরিস্থিতি রয়েছে৷ উদাহরণস্বরূপ, আপনাকে কেবল যে পদ্ধতিটি বলা হয়েছিল তা নয়, উদাহরণস্বরূপ, এটি 3 বার বলা হয়েছিল তা পরীক্ষা করতে হবে। অথবা এটি একটি চক্রে আপনার কাছ থেকে বলা হয়েছিল এবং তাই N বার বলা উচিত ছিল।
আমরা জিজ্ঞাসা করব না এটি করা যায় কিনা, আমরা অবিলম্বে জিজ্ঞাসা করব: কীভাবে এমন একটি নিয়ম লিখবেন? এবং আবার, মকিটো আমাদের হতাশ করে না। নিয়ম হিসাবে নির্দিষ্ট করা যেতে পারে:
Mockito.verify(an object,quantity).method name(parameter);
গুরুত্বপূর্ণ ! পরিমাণ একটি প্রকার নয় int
, কিন্তু একটি বিশেষ বস্তু যা বিভিন্ন নিদর্শন সংজ্ঞায়িত করতে পারে। আপনি কি পদ্ধতির বিভিন্ন সংস্করণ মনে রাখবেন any()
? এটি এখানে একই - এখানে বিশেষ পদ্ধতি রয়েছে যার সাহায্যে আপনি বিভিন্ন পরিস্থিতিতে সেট করতে পারেন:
পদ্ধতি | বর্ণনা | |
---|---|---|
1 | কখনই না() | পদ্ধতি কখনই বলা উচিত নয় |
2 | বার(n) | n বার |
3 | অন্তত(n) | n বা তার বেশি বার |
4 | অন্তত একবার() | 1 বা তার বেশি বার |
5 | সর্বাধিক(n) | n বা কম বার |
6 | কেবল() | শুধুমাত্র একটি কল করা উচিত এবং শুধুমাত্র এই পদ্ধতিতে |
উদাহরণ:
String name1 = mockList.get(1); //method call
String name2 = mockList.get(2); //method call
String name3 = mockList.get(3); //method call
//check that the get() method was called 3 times
Mockito.verify(mockList, times(3)).get(anyInt());
আপনি এটিও প্রয়োজন করতে পারেন যে, নির্দিষ্ট পদ্ধতির আমন্ত্রণ ব্যতীত, বস্তুটির অন্য কোন উল্লেখ করা হবে না । এই জন্য একটি নিয়ম আছে:
Mockito.verifyNoMoreInteractions(an object);
5.3 পদ্ধতি কল অর্ডার
পূর্ববর্তী নিয়ম কোনভাবেই কলিং পদ্ধতির ক্রম নিয়ন্ত্রণ করেনি। নিয়ম শুধু পূরণ করতে হবে এবং তাই। কিন্তু এমন পরিস্থিতিতে আছে যখন পদ্ধতি কলের ক্রম গুরুত্বপূর্ণ, এবং মকিটোরও এর জন্য একটি সমাধান রয়েছে।
পদ্ধতি কলের একটি কঠোর ক্রম একটি বিশেষ বস্তু ব্যবহার করে নির্দিষ্ট করা যেতে পারে InOrder
। প্রথমে আপনাকে এটি তৈরি করতে হবে:
InOrder inOrder = Mockito.inOrder(an object);
এবং তারপর কল পদ্ধতি দ্বারা এটি নিয়ম যোগ করুন verify()
.
উদাহরণ:
List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.add("a parameter");
mockedList.clear();
InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).size();
inOrder.verify(mockedList).add("a parameter");
inOrder.verify(mockedList).clear();
5.4 মকিটোতে ব্যতিক্রম পরীক্ষা করা হচ্ছে
ব্যতিক্রমগুলি নিক্ষেপ করা হয়েছে তা একটু ভিন্নভাবে পরীক্ষা করা হয়েছে। এটি করার জন্য, পদ্ধতিটি ব্যবহার করুন assertThrows()
। এই ধরনের চেকের জন্য সাধারণ বিন্যাস হল:
Assertions.assertThrows(exception.class, () -> an object.methodname());
জটিল কিছু না।
উদাহরণ:
@ExtendWith(MockitoExtension.class)
class ThenThrowTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
//set the behavior of the method (needed for demonstration purposes only)
Mockito.when(mockList.size()).thenThrow(IllegalStateException.class);
//check if an IllegalStateException will be thrown when calling the size method
assertThrows(IllegalStateException.class, () -> mockList.size());
}
}