JUnit হল একটি Java ফ্রেমওয়ার্ক যা ইউনিট টেস্টিং করার জন্য ব্যবহৃত হয়। এটি টেস্ট ক্লাস এবং টেস্ট মেথডগুলি তৈরি করতে সাহায্য করে এবং আপনার কোডের বিভিন্ন অংশের কার্যকারিতা পরীক্ষা করে। Exception Handling বা ব্যতিক্রম পরিচালনা অত্যন্ত গুরুত্বপূর্ণ একটি ধারণা, কারণ কখনও কখনও কোডে ত্রুটি (Exception) ঘটতে পারে, এবং এগুলির সঠিকভাবে পরিচালনা করা প্রয়োজন।
JUnit এর মাধ্যমে Exception Handling টেস্ট করা সম্ভব। JUnit 5 তে assertThrows মেথডের মাধ্যমে Exception এর সঠিক ব্যবস্থাপনা এবং এর সঠিক কার্যকারিতা পরীক্ষা করা যায়।
এই টিউটোরিয়ালে আমরা JUnit এর মাধ্যমে Exception Handling টেস্ট করার একটি বাস্তব উদাহরণ দেখব।
১. JUnit Exception Handling: Basic Concepts
JUnit-এ Exception Handling টেস্ট করার জন্য সাধারণভাবে দুটি মেথড ব্যবহৃত হয়:
- ExpectedException Rule (JUnit 4): JUnit 4-এ
ExpectedExceptionরুল ব্যবহার করা হতো, যার মাধ্যমে আপনি একটি নির্দিষ্ট Exception প্রত্যাশা করতে পারতেন। তবে JUnit 5-এ এটি পরিবর্তন হয়েছে এবংassertThrowsব্যবহার করা হয়। - assertThrows (JUnit 5): JUnit 5-এ
assertThrowsমেথড ব্যবহার করে আপনি নির্দিষ্ট একটি Exception এর কার্যকারিতা পরীক্ষা করতে পারেন।
২. JUnit 5: assertThrows Method
JUnit 5 তে assertThrows একটি স্ট্যাটিক মেথড যা একটি নির্দিষ্ট Exception ধারণ করে এবং এটি পরীক্ষা করে যে, কোনো কোড সেগুলিকে সঠিকভাবে থ্রো করছে কি না।
Syntax:
assertThrows(Class<T> expectedType, Executable executable);
এখানে, expectedType হল যে Exception আপনি প্রত্যাশা করছেন, এবং executable হল কোড ব্লক যা সেই Exception থ্রো করতে পারে।
৩. Exception Handling Example with JUnit
ধরা যাক, আমাদের একটি Calculator ক্লাস আছে যা division অপারেশন করে, তবে ArithmeticException ত্রুটি প্রদর্শন করতে পারে যদি ডিভাইডার শূন্য হয়।
Calculator.java
public class Calculator {
public int divide(int a, int b) {
if (b == 0) {
throw new ArithmeticException("Cannot divide by zero");
}
return a / b;
}
}
এখানে, divide মেথডে শূন্য দ্বারা ভাগ করার চেষ্টা করলে ArithmeticException ছুঁড়ে দেওয়া হয়।
৪. JUnit 5 Test Case for Exception Handling
এখন, আমরা JUnit 5 ব্যবহার করে এই ArithmeticException টেস্ট করব।
CalculatorTest.java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class CalculatorTest {
@Test
void testDivideByZero() {
Calculator calculator = new Calculator();
// Assert that ArithmeticException is thrown when dividing by zero
ArithmeticException exception = assertThrows(ArithmeticException.class, () -> {
calculator.divide(10, 0); // Trying to divide by zero
});
// Assert the exception message
assertEquals("Cannot divide by zero", exception.getMessage());
}
@Test
void testDivideValidInput() {
Calculator calculator = new Calculator();
// Valid division test
int result = calculator.divide(10, 2);
assertEquals(5, result); // 10 divided by 2 should return 5
}
}
এখানে দুটি টেস্ট মেথড রয়েছে:
- testDivideByZero: এখানে
assertThrowsব্যবহার করে আমরা যাচাই করছি যে, যখন শূন্য দ্বারা ভাগ করার চেষ্টা করা হবে, তখন ArithmeticException ছোঁড়া হবে এবং তার মেসেজ সঠিক থাকবে। - testDivideValidInput: এটি একটি সাধারণ টেস্ট যেখানে শূন্য নয় এমন একটি সংখ্যা দিয়ে ভাগ করা হচ্ছে। এটি সঠিক ফলাফল প্রদান করবে।
৫. JUnit 4: ExpectedException Rule (Deprecated in JUnit 5)
যদি আপনি JUnit 4 ব্যবহার করেন, তখন ExpectedException রুল ব্যবহার করে Exception Handling টেস্ট করা যেত।
CalculatorTest.java (JUnit 4 Example)
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
public class CalculatorTest {
@Rule
public ExpectedException exceptionRule = ExpectedException.none();
@Test
public void testDivideByZero() {
Calculator calculator = new Calculator();
exceptionRule.expect(ArithmeticException.class);
exceptionRule.expectMessage("Cannot divide by zero");
calculator.divide(10, 0); // Trying to divide by zero
}
}
এখানে, ExpectedException রুল ব্যবহার করা হয়েছে, যেখানে expect মেথডের মাধ্যমে আমরা যে Exception টেস্ট করতে চাই সেটি নির্ধারণ করেছি।
৬. Exception Handling Best Practices in JUnit
- Specific Exception Testing: Exception টেস্ট করার সময়, প্রত্যাশিত Exception এর সঠিক ক্লাস এবং মেসেজ পরীক্ষা করুন।
- Descriptive Messages: Exception এর মেসেজ বা কন্টেন্ট পরীক্ষা করা গুরুত্বপূর্ণ। এতে ত্রুটির কারণ আরও পরিষ্কারভাবে বোঝা যায়।
- Test Only Valid Scenarios: এমন কোনো কোড যেখানে Exception ছোঁড়া হতে পারে, সেটি সঠিকভাবে পরীক্ষিত হওয়া উচিত। অন্যথায় আপনার কোড সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করা যাবে না।
- Use assertThrows for JUnit 5: JUnit 5 এ
assertThrowsব্যবহার করুন, কারণ এটি JUnit 4 এরExpectedExceptionরুলের চেয়ে বেশি সুনির্দিষ্ট এবং পরিষ্কার।
সারাংশ
JUnit ব্যবহার করে Exception Handling টেস্ট করা সহজ এবং কার্যকরী। JUnit 5 তে assertThrows মেথড ব্যবহার করে আপনি সহজেই একটি নির্দিষ্ট Exception পরীক্ষা করতে পারেন এবং এর সঠিক মেসেজ নিশ্চিত করতে পারেন। JUnit 4 এ, ExpectedException রুল ব্যবহার করে আপনি Exception পরীক্ষা করতে পারতেন, তবে JUnit 5 এ এটি আর প্রয়োজনীয় নয়। Exception টেস্টিংয়ের মাধ্যমে আপনি কোডের স্থিতিশীলতা এবং নিরাপত্তা নিশ্চিত করতে পারেন।
Read more