JUnit একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা Java প্রোগ্রামিং ভাষায় ইউনিট টেস্টিংয়ের জন্য ব্যবহৃত হয়। JUnit আপনাকে সহজে টেস্ট কেস লিখতে এবং চালাতে সহায়তা করে। JUnit 5 (Jupiter) বিভিন্ন টেস্ট লাইফসাইকেল মেথড সরবরাহ করে যা টেস্ট কেসের আগে এবং পরে কিছু প্রস্তুতি এবং পরিস্কার কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়।
এই মেথডগুলির মধ্যে চারটি গুরুত্বপূর্ণ মেথড হল: @BeforeEach, @AfterEach, @BeforeAll, এবং @AfterAll। এগুলি টেস্ট ক্লাসের বিভিন্ন স্টেজে কার্যকর হয় এবং আপনি এগুলোর মাধ্যমে টেস্টের পূর্ব প্রস্তুতি এবং পরবর্তী পরিস্কার কার্যক্রম পরিচালনা করতে পারেন।
১. @BeforeEach (টেস্টের আগে প্রতিটি টেস্টের জন্য)
@BeforeEach অ্যানোটেশনটি একটি মেথডের উপরে ব্যবহার করা হয় এবং এটি প্রতিটি টেস্ট মেথড চালানোর আগে কল হয়। এটি সাধারণত টেস্টের জন্য পূর্ব প্রস্তুতি হিসেবে ব্যবহৃত হয়, যেমন টেস্ট ডেটা সেটআপ বা রিসোর্স ইনিশিয়ালাইজেশন।
উদাহরণ:
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class MyTest {
private DatabaseConnection dbConnection;
@BeforeEach
public void setUp() {
// Database connection তৈরি করা
dbConnection = new DatabaseConnection();
dbConnection.connect();
}
@Test
public void testDatabaseQuery() {
// টেস্ট কোড এখানে
dbConnection.query("SELECT * FROM users");
}
}
এখানে, setUp() মেথডটি প্রতিটি টেস্ট মেথডের আগে রান হবে এবং dbConnection অবজেক্ট ইনিশিয়ালাইজ করা হবে।
২. @AfterEach (টেস্টের পরে প্রতিটি টেস্টের জন্য)
@AfterEach অ্যানোটেশনটি একটি মেথডের উপরে ব্যবহার করা হয় এবং এটি প্রতিটি টেস্ট মেথড চালানোর পরে কল হয়। এটি সাধারণত টেস্ট পরবর্তী পরিস্কার কার্যক্রম যেমন রিসোর্স মুক্ত করা বা টেস্ট ডেটা ক্লিনআপ করতে ব্যবহৃত হয়।
উদাহরণ:
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
public class MyTest {
private DatabaseConnection dbConnection;
@BeforeEach
public void setUp() {
dbConnection = new DatabaseConnection();
dbConnection.connect();
}
@Test
public void testDatabaseQuery() {
// টেস্ট কোড এখানে
dbConnection.query("SELECT * FROM users");
}
@AfterEach
public void tearDown() {
// টেস্ট শেষে রিসোর্স পরিস্কার
dbConnection.disconnect();
}
}
এখানে, tearDown() মেথডটি প্রতিটি টেস্ট মেথডের পরে রান হবে এবং dbConnection.disconnect() কল করে ডাটাবেজ সংযোগ বন্ধ করবে।
৩. @BeforeAll (ক্লাসের একমাত্র ইনিশিয়ালাইজেশন, একটি বার কল হয়)
@BeforeAll অ্যানোটেশনটি একটি মেথডের উপরে ব্যবহার করা হয় এবং এটি ক্লাসের সমস্ত টেস্ট মেথডের আগে একবারই কল হয়। এটি সাধারণত সিস্টেম বা ক্লাস লেভেলের একবার ইনিশিয়ালাইজেশন বা সেটআপের জন্য ব্যবহৃত হয়, যেমন ডাটাবেস কানেকশন বা একবারের জন্য কোনো শেয়ার্ড রিসোর্স তৈরি করা।
@BeforeAll মেথডটি static হতে হবে, কারণ এটি ক্লাস লোড হওয়ার পরেই রান করা হয়, কোন ইনস্ট্যান্স অবজেক্টের প্রয়োজন হয় না।
উদাহরণ:
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
public class MyTest {
private static DatabaseConnection dbConnection;
@BeforeAll
public static void setUpOnce() {
// একবারের জন্য ডাটাবেজ কানেকশন তৈরি
dbConnection = new DatabaseConnection();
dbConnection.connect();
}
@Test
public void testDatabaseQuery() {
// টেস্ট কোড এখানে
dbConnection.query("SELECT * FROM users");
}
}
এখানে, setUpOnce() মেথডটি শুধুমাত্র একবার কল হবে এবং dbConnection একবার ইনিশিয়ালাইজ হবে।
৪. @AfterAll (ক্লাসের একমাত্র ক্লিনআপ, একটি বার কল হয়)
@AfterAll অ্যানোটেশনটি একটি মেথডের উপরে ব্যবহার করা হয় এবং এটি ক্লাসের সমস্ত টেস্ট মেথডের পরে একবারই কল হয়। এটি সাধারণত ক্লাস লেভেলের রিসোর্স ক্লিনআপ করার জন্য ব্যবহৃত হয়, যেমন ডাটাবেস কানেকশন বন্ধ করা বা একবারের জন্য কোনো শেয়ার্ড রিসোর্স মুক্ত করা।
@AfterAll মেথডটি static হতে হবে, কারণ এটি ক্লাস লোড হওয়ার পরে রান করা হয়, কোন ইনস্ট্যান্স অবজেক্টের প্রয়োজন হয় না।
উদাহরণ:
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test;
public class MyTest {
private static DatabaseConnection dbConnection;
@BeforeAll
public static void setUpOnce() {
dbConnection = new DatabaseConnection();
dbConnection.connect();
}
@Test
public void testDatabaseQuery() {
dbConnection.query("SELECT * FROM users");
}
@AfterAll
public static void tearDownOnce() {
// একবারে রিসোর্স ক্লিনআপ
dbConnection.disconnect();
}
}
এখানে, tearDownOnce() মেথডটি @AfterAll অ্যানোটেশন ব্যবহার করে একবারই কল হবে এবং dbConnection.disconnect() কল করে ডাটাবেজ সংযোগ বন্ধ করবে।
টেস্ট লাইফসাইকেল মেথডের মধ্যে পার্থক্য
| মেথড | অবস্থান/প্রভাব | লক্ষ্য |
|---|---|---|
| @BeforeEach | প্রতিটি টেস্টের আগে একবার কল হয় | প্রতিটি টেস্টের জন্য প্রস্তুতি (ইনিশিয়ালাইজেশন) |
| @AfterEach | প্রতিটি টেস্টের পরে একবার কল হয় | প্রতিটি টেস্টের পরে পরিস্কার কার্যক্রম |
| @BeforeAll | টেস্ট ক্লাসের আগে একবার কল হয় | ক্লাস লেভেলের একবারের ইনিশিয়ালাইজেশন |
| @AfterAll | টেস্ট ক্লাসের পরে একবার কল হয় | ক্লাস লেভেলের একবারের ক্লিনআপ |
সারাংশ
JUnit টেস্ট লাইফসাইকেল মেথডগুলি টেস্টের আগে এবং পরে কার্যক্রম সম্পাদন করার জন্য ব্যবহৃত হয়। @BeforeEach এবং @AfterEach মেথডগুলি প্রতিটি টেস্টের আগে এবং পরে কার্যকরী হয়, যেখানে @BeforeAll এবং @AfterAll মেথডগুলি পুরো ক্লাসের জন্য একবার ব্যবহার হয়। এই টেস্ট লাইফসাইকেল মেথডগুলি ব্যবহার করে আপনি আপনার টেস্টগুলোর জন্য প্রস্তুতি এবং পরিস্কার কার্যক্রম আরও সহজ এবং কার্যকরভাবে করতে পারেন।
Read more