Argument Matchers হল EasyMock এর একটি শক্তিশালী বৈশিষ্ট্য যা মক অবজেক্টের জন্য ইনপুট আর্গুমেন্টগুলির মূল্য নির্ধারণ করার সময় নমনীয়তা (flexibility) প্রদান করে। যখন আমরা একটি মক অবজেক্টের জন্য expect() মেথড ব্যবহার করে আর্গুমেন্টের সাথে একটি মেথড কল নির্ধারণ করি, তখন কখনও কখনও আমরা ঠিক নির্দিষ্ট মান এর পরিবর্তে যেকোনো মান বা কিছু শর্ত মেলে এমন আর্গুমেন্টগুলির জন্য সেই মেথডের আচরণ ডিফাইন করতে চাই। এই কাজটি Argument Matchers এর মাধ্যমে করা যায়।
Argument Matchers আমাদেরকে মক অবজেক্টের জন্য আর্গুমেন্টগুলো নির্দিষ্ট করার সময় নমনীয়তা প্রদান করে, যেমন:
- কোনো নির্দিষ্ট মানের জন্য নয়, বরং একটি নির্দিষ্ট ধরণের আর্গুমেন্টের জন্য আচরণ নির্ধারণ করা।
- একাধিক মানের পরিবর্তে wildcard আর্গুমেন্ট ব্যবহার করা।
- আর্গুমেন্টের কোনো শর্ত বা অবস্থা (condition) মেলে এমন কেসগুলি চেক করা।
Argument Matchers এর কাজ
Argument Matchers EasyMock-এ যেকোনো আর্গুমেন্টের জন্য শর্ত এবং নমনীয়তা নির্ধারণ করতে ব্যবহৃত হয়, যেমন:
- any(): যেকোনো মানের জন্য মেলে।
- eq(): নির্দিষ্ট মানের জন্য মেলে।
- isA(): একটি নির্দিষ্ট ধরনের অবজেক্টের জন্য মেলে।
- gt(), lt(): বড় বা ছোট মানের জন্য মেলে।
- notNull(): আর্গুমেন্টটি নাল নয় এমন মানের জন্য মেলে।
- same(): একই অবজেক্টের জন্য মেলে (references).
Commonly Used Argument Matchers
- any(): এটি যেকোনো আর্গুমেন্টের জন্য মেলে।
- উদাহরণ:
anyInt()- যেকোনো পূর্ণসংখ্যার জন্য।
- উদাহরণ:
- eq(): এটি নির্দিষ্ট আর্গুমেন্টের জন্য মেলে।
- উদাহরণ:
eq(5)- শুধুমাত্র মান ৫ এর জন্য।
- উদাহরণ:
- isA(): এটি একটি নির্দিষ্ট ক্লাসের অবজেক্টের জন্য মেলে।
- উদাহরণ:
isA(String.class)- যেকোনো String অবজেক্টের জন্য।
- উদাহরণ:
- gt(), lt(): বড় বা ছোট আর্গুমেন্টের জন্য মেলে।
- উদাহরণ:
gt(5)- ৫ এর চেয়ে বড় মানের জন্য।
- উদাহরণ:
- notNull(): এটি নিশ্চিত করে যে আর্গুমেন্টটি
nullনয়।- উদাহরণ:
notNull()- যেকোনো non-null আর্গুমেন্টের জন্য।
- উদাহরণ:
- same(): এটি একই অবজেক্টের জন্য মেলে (object reference comparison)।
- উদাহরণ:
same(foo)- যেখানেfooএকটি অবজেক্ট, এটি শুধুমাত্র ঐ অবজেক্টটির জন্য কাজ করবে।
- উদাহরণ:
EasyMock Example: Argument Matchers
এখন আসুন, একটি EasyMock উদাহরণ দেখি যেখানে আমরা Argument Matchers ব্যবহার করব। এখানে আমরা একটি Calculator ইন্টারফেসের মক অবজেক্ট তৈরি করব এবং বিভিন্ন আর্গুমেন্ট মেচারের মাধ্যমে আর্গুমেন্টে বিভিন্ন শর্ত মেনে টেস্ট করব।
1. Calculator Interface:
public interface Calculator {
int add(int a, int b);
int subtract(int a, int b);
}
2. EasyMock Example with Argument Matchers:
import static org.easymock.EasyMock.*;
public class EasyMockArgumentMatchersExample {
public static void main(String[] args) {
// Create a mock object of the Calculator interface
Calculator calculatorMock = createMock(Calculator.class);
// Set up expectations using Argument Matchers
expect(calculatorMock.add(anyInt(), eq(5))).andReturn(10); // anyInt() for first arg, eq(5) for second
expect(calculatorMock.subtract(gt(10), lt(20))).andReturn(5); // gt(10) and lt(20) for range check
// Activate the mock
replay(calculatorMock);
// Test the methods with mock behavior
System.out.println("Addition result: " + calculatorMock.add(3, 5)); // Should return 10
System.out.println("Subtraction result: " + calculatorMock.subtract(15, 5)); // Should return 5
// Verify that the expected methods were called
verify(calculatorMock);
}
}
Output:
Addition result: 10
Subtraction result: 5
Explanation:
anyInt(): এখানেanyInt()ব্যবহার করা হয়েছে, যার মানে হল প্রথম আর্গুমেন্ট হিসেবে যেকোনো পূর্ণসংখ্যা গ্রহণ করা হবে।eq(5): এই matcher দিয়ে নিশ্চিত করা হয়েছে যে দ্বিতীয় আর্গুমেন্টে 5 হতে হবে।gt(10)এবংlt(20): এখানে gt(10) (১০ এর চেয়ে বড়) এবং lt(20) (২০ এর চেয়ে ছোট) শর্তে subtract() মেথডটি পরীক্ষা করা হয়েছে।
EasyMock Argument Matchers এর গুরুত্বপূর্ণ ব্যবহার
- Flexible Method Calls: Argument matchers ব্যবহার করে আমরা কোনো নির্দিষ্ট মান বা শর্তের জন্য মক অবজেক্টের আচরণ ডিফাইন করতে পারি।
- Testing Complex Logic: যখন কোনো মেথডে নানা ধরনের ইনপুট থাকে, তখন argument matchers এর মাধ্যমে সহজেই তাদের যাচাই করা যায়।
- Simplified Testing: যদি একাধিক আর্গুমেন্টের মধ্যে অনেকগুলো ভিন্ন ভিন্ন শর্ত থাকে, তবে EasyMock এর argument matchers এর সাহায্যে পরীক্ষাটি আরও সহজ ও নমনীয় করা যায়।
সারাংশ
Argument Matchers হল EasyMock এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা মক অবজেক্টের জন্য আর্গুমেন্টের ম্যাচিংকে নমনীয় এবং শক্তিশালী করে তোলে। any(), eq(), gt(), isA(), notNull() ইত্যাদি মেচারদের মাধ্যমে আমরা মক অবজেক্টের জন্য বিভিন্ন আর্গুমেন্টের জন্য behavior ডিফাইন করতে পারি এবং টেস্টিংয়ের নমনীয়তা বাড়াতে পারি। এটি কোড টেস্টিংকে আরও সঠিক এবং কার্যকরী করে তোলে, বিশেষত যখন মেথডে ভিন্ন ভিন্ন আর্গুমেন্ট বা শর্ত থাকে।
Read more