JUnit হল একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা Java প্রোগ্রামিং ভাষায় ইউনিট টেস্ট তৈরি এবং চালাতে ব্যবহৃত হয়। ইউনিট টেস্টিংয়ের মধ্যে বিভিন্ন ধরনের টেস্ট রান করার আগে কিছু সেটআপ এবং কনফিগারেশন প্রয়োজন হতে পারে। সাধারণত @Before বা @BeforeEach অ্যানোটেশন ব্যবহার করে সেটআপ করা হয়, তবে আপনি যদি কাস্টম সেটআপ অ্যানোটেশন তৈরি করতে চান, তাহলে JUnit এর কাস্টম অ্যানোটেশন ব্যবহার করে সেটআপ করতে পারেন।
এতে আপনি টেস্টের জন্য যেকোনো কাস্টম কার্যক্রম যেমন ডাটাবেস কানেকশন, টেস্ট ডেটা লোডিং, ফাইল সিস্টেমের অ্যাক্সেস ইত্যাদি কাস্টম ভাবে পরিচালনা করতে পারবেন। এই টিউটোরিয়ালে আমরা JUnit এর মাধ্যমে কাস্টম অ্যানোটেশন ব্যবহার করে টেস্ট সেটআপ করব।
১. Custom Annotation এর প্রয়োজনীয়তা
JUnit টেস্টে সাধারণত @Before, @BeforeEach, @After, @AfterEach ইত্যাদি অ্যানোটেশন ব্যবহার করা হয়। তবে, কিছু বিশেষ ক্ষেত্রে যদি আপনি একটি কাস্টম সেটআপ চান, যেখানে একাধিক টেস্ট ক্লাস বা টেস্ট মেথডে একই লজিক প্রয়োগ করতে চান, তাহলে কাস্টম অ্যানোটেশন ব্যবহার করা যায়।
কাস্টম অ্যানোটেশন ব্যবহারের সুবিধা:
- Code Reusability: একই লজিক একাধিক টেস্টে পুনরায় ব্যবহার করা যায়।
- Modularity: টেস্ট ক্লাসের কোডের গঠন আরও পরিষ্কার ও সহজ হবে।
- Maintainability: কাস্টম অ্যানোটেশন ব্যবহার করলে টেস্ট কোডের মেইনটেনেন্স সহজ হবে।
২. Custom Annotation তৈরি করা
প্রথমে, আমরা একটি কাস্টম অ্যানোটেশন তৈরি করব যা টেস্ট সেটআপ কাজ করবে।
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomTestSetup {
// অ্যানোটেশনের জন্য কাস্টম বৈশিষ্ট্য যোগ করা যেতে পারে
}
এখানে, আমরা CustomTestSetup নামে একটি অ্যানোটেশন তৈরি করেছি, যা শুধুমাত্র মেথডে প্রয়োগ করা যাবে (@Target(ElementType.METHOD)), এবং এটি রানটাইমে অ্যাক্সেসযোগ্য থাকবে (@Retention(RetentionPolicy.RUNTIME)).
৩. Custom Annotation এর মাধ্যমে Test Setup
এখন, কাস্টম অ্যানোটেশন ব্যবহার করে টেস্ট সেটআপ তৈরি করা হবে। এটি JUnit 5 এর সাথে কাজ করবে এবং কাস্টম টেস্ট সেটআপকে একটি সাধারণ টেস্ট মেথডের আগে চালানো হবে।
CustomTestSetupProcessor (Custom Annotation Processor):
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
public class CustomTestSetupProcessor implements BeforeAllCallback {
@Override
public void beforeAll(ExtensionContext context) throws Exception {
// টেস্ট সেটআপ: এখানে আপনি যেকোনো কাস্টম সেটআপ কোড রাখতে পারেন
System.out.println("Custom setup executed before all tests...");
}
}
এখানে, BeforeAllCallback ইন্টারফেস ব্যবহার করা হয়েছে, যা JUnit 5 এর extension API এর অংশ। এটি beforeAll মেথডের মাধ্যমে টেস্টের আগে কাস্টম সেটআপ কার্যকর করবে।
৪. Test Class এ Custom Annotation প্রয়োগ করা
এখন, CustomTestSetup অ্যানোটেশন ব্যবহার করে টেস্ট ক্লাসে সেটআপ যোগ করা হবে।
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(CustomTestSetupProcessor.class)
public class CustomAnnotationTest {
@Test
@CustomTestSetup
void testWithCustomSetup() {
System.out.println("Test with custom setup executed");
// আপনার টেস্ট লজিক এখানে থাকবে
}
@Test
void anotherTest() {
System.out.println("Another test executed");
// অন্য টেস্ট লজিক
}
}
এখানে, আমরা @ExtendWith(CustomTestSetupProcessor.class) ব্যবহার করেছি, যা CustomTestSetupProcessor ক্লাসের মাধ্যমে টেস্ট ক্লাসে কাস্টম অ্যানোটেশন প্রসেসিং চালু করবে।
testWithCustomSetup() টেস্ট মেথডে @CustomTestSetup অ্যানোটেশন প্রয়োগ করা হয়েছে, যাতে এটি custom setup কনফিগারেশন চালু করে।
৫. কাস্টম টেস্ট সেটআপ রান করা
এখন যখন আপনি টেস্ট রান করবেন, তখন CustomTestSetup অ্যানোটেশন ব্যবহৃত মেথডের আগে কাস্টম সেটআপ প্রসেসর কার্যকর হবে। টেস্ট রান করার পরে আপনার কনসোলে নিচের আউটপুট দেখতে পাবেন:
Custom setup executed before all tests...
Test with custom setup executed
Another test executed
এখানে, custom setup প্রথমে চলে আসবে এবং তারপর টেস্টগুলি একে একে রান করবে।
৬. Custom Annotation এর মাধ্যমে Test Cleanup
এছাড়া, আপনি @AfterEach বা @After অ্যানোটেশন ব্যবহার করে টেস্ট ক্লিনআপও করতে পারেন। উদাহরণস্বরূপ:
import org.junit.jupiter.api.AfterEach;
public class CustomAnnotationTest {
@AfterEach
void cleanup() {
System.out.println("Custom cleanup after each test");
}
}
এখানে, @AfterEach অ্যানোটেশন ব্যবহার করে প্রতিটি টেস্ট রান করার পরে কাস্টম ক্লিনআপ কার্যকর হবে।
সারাংশ
JUnit এর মাধ্যমে কাস্টম অ্যানোটেশন তৈরি করে টেস্ট সেটআপ এবং ক্লিনআপ করা যায়, যা কোডের পুনরাবৃত্তি কমায় এবং টেস্ট কোডকে আরও সুসংহত এবং রিইউজেবল করে তোলে। এটি JUnit 5 এর extension API এর মাধ্যমে সহজে ইমপ্লিমেন্ট করা যায় এবং আপনার টেস্টের কার্যকারিতা এবং পারফরম্যান্স উন্নত করে। এই টিউটোরিয়ালে, আমরা দেখেছি কিভাবে কাস্টম অ্যানোটেশন ব্যবহার করে টেস্ট সেটআপ এবং টেস্টের আগে বিভিন্ন কাস্টম কার্যক্রম সম্পাদন করা যায়।
Read more