JUnit হল একটি পপুলার টেস্টিং ফ্রেমওয়ার্ক যা Java প্রোগ্রামিং ভাষায় ইউনিট টেস্ট লিখতে ব্যবহৃত হয়। JUnit এর দুটি প্রধান সংস্করণ হলো JUnit 4 এবং JUnit 5। যদিও উভয়ই Java টেস্টিং ফ্রেমওয়ার্ক, তবে তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। JUnit 5 হল JUnit এর আপডেট সংস্করণ, যা বেশ কিছু নতুন বৈশিষ্ট্য এবং উন্নতি নিয়ে এসেছে।
এই টিউটোরিয়ালে, আমরা JUnit 4 এবং JUnit 5 এর মধ্যে প্রধান পার্থক্যগুলো আলোচনা করব।
১. JUnit 4 এবং JUnit 5 এর মধ্যে প্রধান পার্থক্য
১.১ JUnit 5 এর নতুন আর্কিটেকচার
JUnit 5 একটি মডুলার আর্কিটেকচার নিয়ে এসেছে, যা পূর্ববর্তী সংস্করণের তুলনায় আরও বেশি নমনীয় এবং কাস্টমাইজেবল। JUnit 5 তে তিনটি প্রধান মডিউল রয়েছে:
- JUnit Platform: এটি JUnit 5 এর জন্য রUNTIME সাপোর্ট প্রদান করে এবং অন্যান্য টেস্টিং ফ্রেমওয়ার্ক (যেমন TestNG) এর সাথে একত্রিত হওয়ার সুবিধা দেয়।
- JUnit Jupiter: এটি JUnit 5 এর নতুন টেস্টিং API যা JUnit 5 এর টেস্ট কেস লেখার জন্য ব্যবহৃত হয়।
- JUnit Vintage: এটি JUnit 3 এবং JUnit 4 এর জন্য সমর্থন প্রদান করে, যাতে পুরোনো টেস্ট কেসগুলি JUnit 5 প্ল্যাটফর্মে চালানো যায়।
১.২ JUnit 5 তে Annotations এর পরিবর্তন
JUnit 5 এ বেশ কিছু নতুন অ্যানোটেশন এসেছে এবং পুরোনো কিছু অ্যানোটেশন পরিবর্তন হয়েছে। এখানে কিছু গুরুত্বপূর্ণ পরিবর্তন দেখানো হলো:
| JUnit 4 Annotations | JUnit 5 Annotations |
|---|---|
@Test | @Test |
@Before | @BeforeEach |
@After | @AfterEach |
@BeforeClass | @BeforeAll |
@AfterClass | @AfterAll |
@Ignore | @Disabled |
@Test: এই অ্যানোটেশনটি উভয় সংস্করণে রয়েছে, তবে JUnit 5 এর @Test অধিক শক্তিশালী এবং আরও কিছু অতিরিক্ত বৈশিষ্ট্য সরবরাহ করে।
@BeforeEach এবং @AfterEach: JUnit 4 তে @Before এবং @After অ্যানোটেশনগুলি মেথডের আগে এবং পরে রান করানোর জন্য ব্যবহৃত হয়, তবে JUnit 5 এ @BeforeEach এবং @AfterEach অ্যানোটেশনগুলি একই কাজ করে।
@BeforeAll এবং @AfterAll: JUnit 4 তে @BeforeClass এবং @AfterClass ছিল, কিন্তু JUnit 5 এ তাদের নাম পরিবর্তন হয়ে @BeforeAll এবং @AfterAll হয়েছে।
@Disabled: JUnit 4 তে @Ignore ব্যবহৃত হত টেস্ট অক্ষম (skip) করতে, কিন্তু JUnit 5 এ এটি @Disabled নামে পরিবর্তিত হয়েছে।
১.৩ Lambda Expression Support
JUnit 5 তে lambda expressions এর সমর্থন এসেছে, যা টেস্ট কেস লেখার ক্ষেত্রে আরও নমনীয়তা এবং পাঠযোগ্যতা প্রদান করে। JUnit 5 তে assertions এবং assumptions ল্যাম্বডা এক্সপ্রেশন গ্রহণ করতে পারে।
উদাহরণ:
JUnit 4:
assertTrue("Condition is true", condition);
JUnit 5:
assertTrue(() -> condition);
১.৪ Dynamic Tests
JUnit 5 এ dynamic tests এর জন্য সমর্থন রয়েছে, যা টেস্ট কেসগুলিকে রানটাইমে তৈরি করার সুযোগ দেয়। এর ফলে, টেস্ট কেসের সংখ্যা রানটাইমে পরিবর্তিত হতে পারে এবং আরও অনেক বেশি কাস্টম টেস্টের সুযোগ তৈরি হয়।
@TestFactory
Stream<DynamicTest> dynamicTests() {
return Stream.of(
DynamicTest.dynamicTest("Test 1", () -> assertTrue(true)),
DynamicTest.dynamicTest("Test 2", () -> assertEquals(4, 2 + 2))
);
}
১.৫ Tagging and Filtering Tests
JUnit 5 তে tagging এবং filtering টেস্টের জন্য নতুন সমর্থন এসেছে, যা টেস্টের গুণমান এবং কার্যকারিতা আরও সহজে ট্র্যাক করতে সহায়তা করে। আপনি টেস্টগুলিকে ট্যাগ করতে পারেন এবং নির্দিষ্ট ট্যাগ দ্বারা ফিল্টার করতে পারেন।
@Tag("fast")
@Test
void testFast() {
assertTrue(true);
}
১.৬ JUnit 5 তে Parameterized Tests
JUnit 5 তে parameterized tests আরও সহজ এবং শক্তিশালী হয়েছে। এটি আপনাকে একই টেস্ট কেসকে বিভিন্ন ইনপুট দিয়ে পরীক্ষা করতে সহায়তা করে।
@ParameterizedTest
@ValueSource(strings = { "apple", "banana", "cherry" })
void testWithStringParameter(String fruit) {
assertNotNull(fruit);
}
২. JUnit 4 এবং JUnit 5 এর মধ্যে অন্যান্য পার্থক্য
| Feature | JUnit 4 | JUnit 5 |
|---|---|---|
| Annotations | @Test, @Before, @After | @Test, @BeforeEach, @AfterEach |
| Lifecycle Annotations | @BeforeClass, @AfterClass | @BeforeAll, @AfterAll |
| Test Execution Order | Fixed Order | Customizable (via @TestMethodOrder) |
| Assumptions | @Assume, @Ignore | @EnabledIf, @Disabled |
| Parameterized Tests | @RunWith(Parameterized.class) | @ParameterizedTest |
| Support for Dynamic Tests | Not Supported | Supported via @TestFactory |
| Support for Lambda Expressions | Limited | Full Support |
৩. JUnit 5 এর ইনস্টলেশন এবং কনফিগারেশন
৩.১ Maven Dependency for JUnit 5
<dependencies>
<!-- JUnit 5 Dependencies -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.2</version>
<scope>test</scope>
</dependency>
</dependencies>
৩.২ Gradle Dependency for JUnit 5
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.2'
}
৩.৩ JUnit 5 এর জন্য Maven Surefire Plugin
JUnit 5 এর টেস্টগুলো চালানোর জন্য, Maven Surefire Plugin এর সংস্করণ 2.22.0 বা তার পরবর্তী সংস্করণ ব্যবহার করা উচিত:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
</plugins>
</build>
সারাংশ
JUnit 4 এবং JUnit 5 এর মধ্যে অনেক পার্থক্য রয়েছে, যার মধ্যে প্রধান পার্থক্য হলো JUnit 5 এর নতুন আর্কিটেকচার, নতুন অ্যানোটেশন, ডায়নামিক টেস্টিং, ল্যাম্বডা এক্সপ্রেশন সাপোর্ট এবং কাস্টম টেস্টিং সক্ষমতা। JUnit 5 একটি শক্তিশালী এবং নমনীয় টেস্টিং ফ্রেমওয়ার্ক যা নতুন বৈশিষ্ট্য এবং কাস্টমাইজেশন এর সুযোগ দিয়ে উন্নত টেস্টিং পরিবেশ তৈরি করেছে। JUnit 4 এবং JUnit 5 দুটোই জনপ্রিয়, তবে JUnit 5 আধুনিক টেস্টিংয়ের জন্য বেশি উপযোগী এবং ফিচার-প্যাকড।
Read more