6.1 স্ট্যাটিক পদ্ধতিকে উপহাস করা mockStatic()
এবং আরও একটি গুরুত্বপূর্ণ বিষয় হল স্ট্যাটিক পদ্ধতির উপহাস এবং যাচাইকরণ। "এতে কি ভুল?" আপনি জিজ্ঞাসা করুন. হ্যাঁ, স্ট্যাটিক, কিন্তু পদ্ধতি একই। এবং আপনি ভুল হবে.
আমরা উপহাস বস্তু সম্পর্কে শেখার শুরু যেখানে মনে আছে? যেহেতু এই বস্তুগুলো কৃত্রিমভাবে এর মাধ্যমে তৈরি করা হয়েছে DynamicProxy
। এবং স্থির পদ্ধতিগুলি কোনও বস্তুর সাথে আবদ্ধ নয় এবং তাদের মাধ্যমে কলগুলিকে বাধা দেওয়া DynamicProxy
অসম্ভব । এখানেই শেষ.
কিন্তু মকিটোর নির্মাতারা এখানেও ফাঁকি দিতে পেরেছিলেন - তারা তাদের নিজস্ব ক্লাস লোডার লিখেছিলেন এবং এর সাহায্যে তারা ফ্লাইতে ক্লাসগুলি প্রতিস্থাপন করতে সক্ষম হয়েছিল। একটি বড় এবং কঠিন কাজ, কিন্তু তারা এখনও এটি করতে পরিচালিত.
আপনাকে এতে একটি অতিরিক্ত লাইব্রেরি যোগ করতে হবে pom.xml
:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
আপনি একটি স্ট্যাটিক পদ্ধতি উপহাস করার প্রয়োজন হলে কিভাবে কাজ করবেন তা এখানে।
1 একটি বিশেষ মক ক্লাস অবজেক্ট তৈরি করুন:
MockedStatic<ClassName>managerObject = Mockito.mockStatic(ClassName.class);
2 এই বস্তুর অপারেশন নিয়ম যোগ করুন:
নিয়মের এই বস্তুটি অন্য উপায়ে আঁকড়ে থাকা আবশ্যক।
managerObject.when(ClassName::method name).thenReturn(result);
3 এই বস্তুর ব্যবহারকে মোড়ানোtry-with-resources
নিশ্চিত করুন যাতে বস্তুটি অবিলম্বে মুছে ফেলা হয় এবং মকিটো এর সাথে সম্পর্কিত নিয়মগুলি পরিষ্কার করতে পারে।
উদাহরণ:
@Test
void givenStaticMethodWithNoArgs () {
try (MockedStatic< StaticUtils> utilities = Mockito.mockStatic( StaticUtils.class)) {
// add rule
utilities.when(StaticUtils::name).thenReturn("Hello");
// check if the rule works
assertEquals("Hello", StaticUtils.name());
}
}
@Mock
টীকা এবং হিসাবে সুন্দর নয় @Spy
, কিন্তু খুব ব্যবহারিক. পরীক্ষার অধীনে থাকা পদ্ধতিগুলির ভিতরে ব্যবহৃত একটি সাধারণ স্ট্যাটিক পদ্ধতিকে উপহাস করা যখন অসম্ভব ছিল তখন পরীক্ষা লিখতে খুব কঠিন ছিল।
GO TO FULL VERSION