JUnit হল একটি অত্যন্ত জনপ্রিয় এবং কার্যকরী টেস্টিং ফ্রেমওয়ার্ক যা Java অ্যাপ্লিকেশনের ইউনিট টেস্টিং এর জন্য ব্যবহৃত হয়। যখন আপনি JUnit ব্যবহার করেন, সাধারণত assertions এর মাধ্যমে আপনি পরীক্ষিত কোডের ফলাফল যাচাই করেন। JUnit Assertions সাধারণত প্রস্তুত করা assertion মেথডগুলি দিয়ে কাজ করে, যেমন assertEquals(), assertTrue(), assertFalse(), ইত্যাদি।
কিন্তু কখনও কখনও আপনার পরীক্ষাগুলির জন্য নির্দিষ্ট কাস্টম assertion তৈরি করতে হতে পারে। এই টিউটোরিয়ালে, আমরা কিভাবে Custom Assertions তৈরি এবং ব্যবহার করতে পারি তা আলোচনা করব।
১. Custom Assertions এর প্রয়োজনীয়তা
এটি তখন প্রয়োজনীয় হয় যখন আপনার টেস্টগুলি এমন কিছু জটিল লজিক বা ডেটা চেক করে যা JUnit এর ডিফল্ট assertion মেথডের মাধ্যমে যাচাই করা কঠিন বা অসম্ভব। Custom assertion তৈরি করে আপনি সেই যাচাইকরণের প্রক্রিয়াকে আরও পরিষ্কার এবং পুনরায় ব্যবহৃতযোগ্য (reusable) করতে পারেন।
উদাহরণস্বরূপ, আপনি একটি Person অবজেক্টের বয়স এবং নাম যাচাই করতে চান, তবে আপনার assertion কোড যদি একাধিক স্থানে ব্যবহৃত হয়, তবে তা Custom Assertion তৈরি করা সহজ এবং কোড পুনঃব্যবহারযোগ্যতার দিকে কাজ করবে।
২. JUnit Custom Assertion তৈরি করা
Custom assertion তৈরি করার জন্য একটি helper method বা একটি Utility ক্লাস তৈরি করা যেতে পারে, যেটি সাধারণত assert পদ্ধতির মতো কাজ করবে। এটি একটি সাধারণ ক্লাস হতে পারে, যা কোনো অবজেক্টের একটি নির্দিষ্ট প্রপার্টি পরীক্ষা করবে।
উদাহরণ: Person অবজেক্টের জন্য Custom Assertion তৈরি করা
ধরা যাক, আমাদের একটি Person ক্লাস রয়েছে এবং আমরা তার age এবং name প্রপার্টি যাচাই করতে চাই।
Person.java
public class Person {
private String name;
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getters
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
এখন, একটি Custom Assertion ক্লাস তৈরি করা যাক।
CustomAssertions.java
public class CustomAssertions {
// Custom assertion to check if the person's age is valid
public static void assertValidAge(int age) {
if (age < 0 || age > 150) {
throw new AssertionError("Age is not valid: " + age);
}
}
// Custom assertion to check if the person's name is valid (non-empty)
public static void assertValidName(String name) {
if (name == null || name.trim().isEmpty()) {
throw new AssertionError("Name is not valid: " + name);
}
}
}
এখানে, আমরা দুটি কাস্টম assertion তৈরি করেছি:
- assertValidAge(): এটি যাচাই করবে যে বয়সের মান ০ থেকে ১৫০ এর মধ্যে রয়েছে।
- assertValidName(): এটি যাচাই করবে যে নামটি
nullবা খালি নয়।
৩. JUnit Test Case এ Custom Assertion ব্যবহার
এখন, আমরা JUnit টেস্ট কেস তৈরি করব যেখানে আমরা উপরের কাস্টম assertion গুলি ব্যবহার করব।
PersonTest.java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.fail;
public class PersonTest {
@Test
public void testValidPerson() {
Person person = new Person("John", 25);
try {
CustomAssertions.assertValidName(person.getName());
CustomAssertions.assertValidAge(person.getAge());
} catch (AssertionError e) {
fail("Person validation failed: " + e.getMessage());
}
}
@Test
public void testInvalidAge() {
Person person = new Person("Jane", -5);
try {
CustomAssertions.assertValidAge(person.getAge());
fail("Expected AssertionError for invalid age");
} catch (AssertionError e) {
// Test passed, invalid age throws AssertionError
}
}
@Test
public void testInvalidName() {
Person person = new Person("", 30);
try {
CustomAssertions.assertValidName(person.getName());
fail("Expected AssertionError for invalid name");
} catch (AssertionError e) {
// Test passed, invalid name throws AssertionError
}
}
}
এখানে:
- testValidPerson() টেস্টে, আমরা একটি valid person যাচাই করব যার নাম এবং বয়স সঠিক।
- testInvalidAge() টেস্টে, আমরা একটি invalid age পরীক্ষা করব (যেমন -5), যা
AssertionErrorতৈরি করবে। - testInvalidName() টেস্টে, আমরা একটি empty name পরীক্ষা করব, যা আবারও
AssertionErrorতৈরি করবে।
৪. Custom Assertion ব্যবহার করার সুবিধা
- Code Reusability: একাধিক টেস্ট কেসে একই ধরনের যাচাইকরণ ব্যবহার করা যাবে, যা কোড পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে।
- Clearer Test Cases: কাস্টম assertion এর মাধ্যমে, টেস্ট কেসগুলি আরও পরিষ্কার এবং সহজবোধ্য হয়, কারণ আপনি শুধু প্রাসঙ্গিক যাচাইকরণকে একটি মেথডের মাধ্যমে একত্রিত করেন।
- Better Error Messages: কাস্টম assertion এ আপনি ত্রুটির বার্তা কাস্টমাইজ করতে পারেন, যা ডিবাগিংকে আরও সহজ করে তোলে।
- Centralized Validation Logic: টেস্টের জন্য একত্রিত যাচাইকরণ লজিক তৈরি করা যায়, যা কোডে অন্যান্য জায়গায় ব্যবহার করা যায়।
৫. JUnit 5 এর নতুন ফিচারগুলির সাথে Custom Assertions
JUnit 5 তে assertAll() এবং assertThrows() এর মতো নতুন ফিচার রয়েছে যা কাস্টম assertion ব্যবহারের আরও কিছু সুযোগ প্রদান করে।
উদাহরণ: assertAll ব্যবহার করে একাধিক assertion একসাথে চালানো
import static org.junit.jupiter.api.Assertions.*;
public class PersonTest {
@Test
public void testPersonValidations() {
Person person = new Person("John", 25);
assertAll(
() -> CustomAssertions.assertValidName(person.getName()),
() -> CustomAssertions.assertValidAge(person.getAge())
);
}
}
এখানে, assertAll() ব্যবহার করে আমরা একাধিক কাস্টম assertion একসাথে চালাতে পারি।
সারাংশ
JUnit Custom Assertions হল একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে কাস্টম যাচাইকরণ লজিক তৈরি করতে এবং আপনার টেস্টগুলিকে আরও পরিষ্কার এবং রিচ করতে সহায়তা করে। যখন ডিফল্ট JUnit Assertions যথেষ্ট না হয়, তখন কাস্টম assertion ব্যবহার করে আপনি আপনার টেস্টিং প্রক্রিয়াকে আরও দক্ষ এবং পুনরাবৃত্তিযোগ্য করতে পারেন। JUnit 5 এর নতুন ফিচারগুলি কাস্টম assertion এর ব্যবহারের আরও সুযোগ সৃষ্টি করেছে, যেমন assertAll() এবং assertThrows()।
Read more