JUnit হল একটি জনপ্রিয় ফ্রেমওয়ার্ক যা Java প্রোগ্রামিং ভাষায় ইউনিট টেস্টিং এর জন্য ব্যবহৃত হয়। সময়ের সাথে সাথে JUnit এর বিভিন্ন সংস্করণ এসেছে, যার মধ্যে JUnit 5 এখনকার সময়ের সর্বশেষ সংস্করণ। যদি আপনার প্রোজেক্টে পূর্বে লেখা JUnit 4 কোড থাকে, তবে এটি JUnit 5 এ মাইগ্রেট করা গুরুত্বপূর্ণ হতে পারে যাতে আপনি সর্বশেষ সুবিধাগুলি এবং ফিচারগুলি পেতে পারেন।
এই গাইডে, আমরা JUnit 5 তে Legacy JUnit 4 Code Migration সম্পর্কে বিস্তারিতভাবে আলোচনা করব। এতে আমরা দেখব কীভাবে আপনার পুরানো JUnit 4 টেস্ট কেসগুলোকে JUnit 5 ফ্রেমওয়ার্কে রূপান্তর করবেন এবং এই প্রক্রিয়ায় কী কী পরিবর্তন প্রয়োজন।
১. JUnit 4 এবং JUnit 5 এর মধ্যে পার্থক্য
JUnit 4 এবং JUnit 5 এর মধ্যে কিছু মূল পার্থক্য রয়েছে। JUnit 5 অনেক নতুন বৈশিষ্ট্য এবং উন্নতি নিয়ে এসেছে, যেমন:
- JUnit 5 এর মধ্যে JUnit Platform, JUnit Jupiter, এবং JUnit Vintage তিনটি আলাদা মডিউল থাকে।
- JUnit Jupiter নতুন অ্যানোটেশন এবং API প্রদান করে, যা JUnit 5 এর টেস্ট রানের জন্য ব্যবহৃত হয়।
- JUnit Vintage পুরনো JUnit সংস্করণ, যেমন JUnit 3 এবং JUnit 4 টেস্টগুলিকে সমর্থন করে।
২. JUnit 4 থেকে JUnit 5 তে মাইগ্রেশন কিভাবে করবেন?
২.১ JUnit 4 এর টেস্ট কেস উদাহরণ (Legacy Code)
ধরা যাক আপনার একটি JUnit 4 টেস্ট কেস রয়েছে:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
assertEquals(5, calculator.add(2, 3));
}
}
এখানে, JUnit 4 এর @Test অ্যানোটেশন ব্যবহার করা হয়েছে এবং assertEquals মেথডের মাধ্যমে টেস্ট ফলাফল যাচাই করা হচ্ছে।
২.২ JUnit 5 এ মাইগ্রেট করা
JUnit 5 এ কিছু পরিবর্তন হয়েছে, যেমন নতুন অ্যানোটেশন এবং assert মেথডের ব্যবহারের স্টাইল। JUnit 5 এ @Test অ্যানোটেশন, Assertions ক্লাস এবং @BeforeAll, @AfterAll, @BeforeEach, @AfterEach এর মতো নতুন অ্যানোটেশন যুক্ত হয়েছে।
JUnit 5 এর টেস্ট কেস:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
assertEquals(5, calculator.add(2, 3));
}
}
এখানে:
- @Test অ্যানোটেশনটি এখন org.junit.jupiter.api.Test থেকে আনা হয়।
- assertEquals মেথডটি org.junit.jupiter.api.Assertions থেকে এসেছে।
২.৩ JUnit 5 এর নতুন ফিচার এবং অ্যানোটেশন
- @BeforeEach এবং @AfterEach:
- JUnit 5 তে, প্রতিটি টেস্ট মেথডের আগে এবং পরে চলার জন্য @BeforeEach এবং @AfterEach অ্যানোটেশন ব্যবহার করা হয়।
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
public class CalculatorTest {
@BeforeEach
public void setup() {
// Setup code for each test
}
@AfterEach
public void cleanup() {
// Cleanup code after each test
}
@Test
public void testAdd() {
// Test code
}
}
- @BeforeAll এবং @AfterAll:
- @BeforeAll এবং @AfterAll ব্যবহৃত হয় টেস্ট ক্লাসে একবার চালানোর জন্য। @BeforeAll ক্লাস লেভেল ফাংশনগুলোর আগে এবং @AfterAll ফাংশনগুলোর পরে চালানো হয়।
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.AfterAll;
public class CalculatorTest {
@BeforeAll
static void initAll() {
// Setup before all tests
}
@AfterAll
static void tearDownAll() {
// Cleanup after all tests
}
@Test
void testAdd() {
// Test method
}
}
২.৪ JUnit 4 থেকে JUnit 5 তে Dependency পরিবর্তন
JUnit 5 ব্যবহার করতে হলে আপনাকে কিছু নতুন ডিপেনডেন্সি যোগ করতে হবে। নিচে Maven ডিপেনডেন্সি উদাহরণ দেয়া হলো:
<dependencies>
<!-- JUnit 5 Dependency -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.1</version>
<scope>test</scope>
</dependency>
<!-- JUnit Vintage (for running legacy JUnit 4 tests) -->
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.7.1</version>
<scope>test</scope>
</dependency>
</dependencies>
এখানে JUnit Jupiter (JUnit 5) এবং JUnit Vintage (JUnit 4 এর জন্য) ডিপেনডেন্সি যুক্ত করা হয়েছে।
২.৫ JUnit 5 তে Extension এবং Parameterized Tests
JUnit 5 তে extension এবং parameterized tests এর সমর্থন রয়েছে। আপনি @ParameterizedTest এবং @ValueSource ব্যবহার করে একাধিক ইনপুটের সাথে টেস্ট চালাতে পারেন।
import org.junit.jupiter.api.ParameterizedTest;
import org.junit.jupiter.api.ValueSource;
public class CalculatorTest {
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testAdd(int number) {
Calculator calculator = new Calculator();
assertEquals(number + 1, calculator.add(number, 1));
}
}
এখানে, @ParameterizedTest ব্যবহার করে একাধিক ইনপুটের সাথে টেস্ট করা হয়েছে।
৩. JUnit 4 থেকে JUnit 5 তে মাইগ্রেশন করার জন্য টিপস
- Test Naming: JUnit 5 এ টেস্ট মেথডের নামের জন্য CamelCase এবং Meaningful Names ব্যবহার করার পরামর্শ দেওয়া হয়।
- Annotations Update: @Before, @After, @BeforeClass, @AfterClass এর পরিবর্তে @BeforeEach, @AfterEach, @BeforeAll, @AfterAll ব্যবহার করুন।
- Assertions: JUnit 5 এ assert মেথডগুলির মধ্যে কিছু পরিবর্তন এসেছে। যেমন assertTrue এবং assertFalse সেগুলি Assertions ক্লাসে রয়েছে।
সারাংশ
JUnit 5 এর সাহায্যে আপনি সহজেই JUnit 4 এর পুরানো টেস্ট কেসগুলোকে নতুন এবং উন্নত টেস্ট কেসে রূপান্তর করতে পারবেন। JUnit 5 অনেক নতুন ফিচার, অ্যানোটেশন এবং উন্নত পারফরম্যান্স প্রদান করে, যেমন @BeforeEach, @AfterEach, @ParameterizedTest, @ValueSource, এবং @BeforeAll, @AfterAll। এই টিউটোরিয়ালে আমরা দেখেছি কিভাবে JUnit 4 থেকে JUnit 5 তে মাইগ্রেট করা যায় এবং এই প্রক্রিয়ায় কী কী পরিবর্তন করতে হয়।
Read more