JUnit হল Java টেস্টিং ফ্রেমওয়ার্ক যা ইউনিট টেস্ট তৈরি এবং চালানোর জন্য ব্যবহৃত হয়। JUnit-এ Custom Matcher ব্যবহার করা হয় যখন আপনি কমপ্লেক্স অবজেক্টের উপর বৈশিষ্ট্য বা শর্ত যাচাই করতে চান। Hamcrest হল একটি জনপ্রিয় ম্যাচিং ফ্রেমওয়ার্ক যা JUnit এর সাথে ব্যবহার করা যায় এবং Custom Matcher তৈরি করার জন্য সহায়ক হয়।
এই গাইডে, আমরা একটি Complex Object এর ভ্যালিডেশন টেস্ট করার জন্য Custom Matcher তৈরি করার প্রক্রিয়া দেখব।
১. Custom Matcher কি?
Custom Matcher হল একটি কাস্টম শর্ত বা নিয়ম যা কোন অবজেক্ট বা ভ্যালু যাচাই করতে ব্যবহৃত হয়। JUnit বা Hamcrest ফ্রেমওয়ার্কের মাধ্যমে আপনি সহজেই assert করতে পারবেন, যেখানে ম্যাচার ব্যবহার করে আপনি কোন অবজেক্টের নির্দিষ্ট প্রপার্টি চেক করতে পারবেন।
Hamcrest এর ম্যাচার্স আপনাকে খুবই শক্তিশালী এবং পরিষ্কারভাবে কাস্টম শর্ত পরীক্ষা করার সুযোগ দেয়। আপনি যখন একটি Complex Object যাচাই করতে চান, তখন Custom Matcher খুবই উপকারী।
২. Hamcrest Matcher কিভাবে কাজ করে
Hamcrest এর মাধ্যমে Custom Matcher তৈরি করার জন্য, আপনি একটি Matcher<T> ইন্টারফেস ইমপ্লিমেন্ট করতে পারেন এবং সেখানে আপনি আপনার কাস্টম লজিক বা শর্ত নির্ধারণ করবেন।
Basic Example:
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
public class CustomMatcher extends TypeSafeMatcher<ComplexObject> {
private String expectedName;
public CustomMatcher(String expectedName) {
this.expectedName = expectedName;
}
@Override
protected boolean matchesSafely(ComplexObject complexObject) {
return complexObject.getName().equals(expectedName);
}
@Override
public void describeTo(Description description) {
description.appendText("Expected name to be: " + expectedName);
}
public static Matcher<ComplexObject> hasName(String name) {
return new CustomMatcher(name);
}
}
এখানে, আমরা একটি CustomMatcher তৈরি করেছি যা একটি ComplexObject এর নাম বৈশিষ্ট্য যাচাই করে। আপনি এই Matcher ব্যবহার করে assertThat বা assert করতে পারবেন।
৩. Complex Object Example
ধরা যাক, আপনার কাছে একটি ComplexObject ক্লাস রয়েছে যেটি বিভিন্ন প্রপার্টি ধারণ করে, এবং আপনি ঐ প্রপার্টির মান যাচাই করতে চান।
ComplexObject.java:
public class ComplexObject {
private String name;
private int age;
public ComplexObject(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
এখানে, ComplexObject দুটি প্রপার্টি ধারণ করে: name এবং age।
৪. JUnit Test Case with Custom Matcher
এখন আমরা JUnit টেস্ট কেস তৈরি করব যেখানে Hamcrest Matcher ব্যবহার করে আমরা ComplexObject এর name বৈশিষ্ট্য যাচাই করব।
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
public class ComplexObjectTest {
@Test
public void testComplexObjectName() {
ComplexObject complexObject = new ComplexObject("John", 25);
// Using Custom Matcher
assertThat(complexObject, CustomMatcher.hasName("John"));
}
@Test
public void testComplexObjectAge() {
ComplexObject complexObject = new ComplexObject("John", 25);
// Using default Hamcrest matcher
assertThat(complexObject.getAge(), is(25));
}
}
এখানে, প্রথম টেস্ট কেস testComplexObjectName এ আমরা CustomMatcher ব্যবহার করেছি, যা যাচাই করবে যে ComplexObject এর name প্রপার্টি "John" এর সমান কিনা।
assertThat ব্যবহার করে আমরা Hamcrest এর মাধ্যমে ম্যাচিং প্রক্রিয়া সোজা এবং পরিষ্কারভাবে করতে পারি।
৫. Custom Matcher এর সুবিধা
- Code Reusability: আপনি একবার কাস্টম ম্যাচার তৈরি করলে তা বিভিন্ন টেস্ট কেসে পুনরায় ব্যবহার করতে পারেন।
- Readability: Custom Matcher এর মাধ্যমে টেস্ট কেসগুলি পরিষ্কার এবং সহজে পাঠযোগ্য হয়।
- Complex Logic Validation: যখন আপনি বেশি কাস্টমাইজড বা জটিল ভ্যালিডেশন করতে চান, তখন Custom Matcher খুব কার্যকরী হয়।
- Extensibility: নতুন শর্ত বা লজিক যোগ করতে খুব সহজে Custom Matcher কাস্টমাইজ করা যায়।
৬. উপসংহার
JUnit এবং Hamcrest এর মাধ্যমে Custom Matcher তৈরি করে আপনি Complex Object এর ভ্যালিডেশন এবং পরীক্ষা আরও সহজ ও কার্যকরী করতে পারেন। কাস্টম ম্যাচিং ফাংশন তৈরি করলে আপনি জটিল অবজেক্টের বৈশিষ্ট্য যাচাই করার জন্য কাস্টম শর্ত যুক্ত করতে পারবেন, যা পরবর্তীতে আপনার টেস্টিং প্রক্রিয়াকে আরও শক্তিশালী এবং পরিষ্কার করে তুলবে।
এটি ডেভেলপারদের দ্রুত এবং নির্ভুল টেস্টিং করতে সহায়তা করবে এবং বড় এবং জটিল সিস্টেমে আরও কার্যকরী ফলাফল প্রদান করবে।
Read more