JUnit হল একটি শক্তিশালী টেস্টিং ফ্রেমওয়ার্ক যা Java প্রোগ্রামগুলির জন্য ইউনিট টেস্ট লেখা এবং চালানোর জন্য ব্যবহৃত হয়। JUnit এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল exception handling এর জন্য টেস্ট কেস লেখার সুবিধা। আপনি যদি কোনো কোডের মধ্যে একটি নির্দিষ্ট exception আশা করেন, তবে @Test(expected = Exception.class) অ্যানোটেশন ব্যবহার করতে পারেন।
এটি নিশ্চিত করতে সাহায্য করে যে, আপনার টেস্ট করা কোডে কোনো নির্দিষ্ট exception সঠিকভাবে থ্রো হচ্ছে কি না। এই অ্যানোটেশনটি ব্যবহার করে আপনি সুনির্দিষ্ট এক্সেপশন আশা করতে পারেন এবং যদি এটি কোডে তৈরি হয়, তবে টেস্ট সফল হবে। অন্যথায়, টেস্টটি ব্যর্থ হবে।
১. @Test(expected = Exception.class) এর ধারণা
JUnit এর @Test(expected = Exception.class) অ্যানোটেশনটি একটি টেস্ট মেথডে ব্যবহৃত হয় যখন আপনি আশা করছেন যে, ওই মেথডটি একটি নির্দিষ্ট exception থ্রো করবে। এর মাধ্যমে, আপনি টেস্টে এক্সেপশন ঘটলে সেটিকে সফল হিসেবে গণ্য করতে পারেন।
Syntax:
@Test(expected = Exception.class)
public void testMethod() {
// Code that should throw an exception
}
এখানে, expected = Exception.class নির্দেশ করে যে testMethod() মেথডটি Exception থ্রো করবে। যদি মেথডটি সত্যিই এক্সেপশন থ্রো করে, তবে টেস্টটি সফল হবে।
২. উদাহরণ সহ @Test(expected = Exception.class) ব্যবহার
ধরা যাক, আমাদের একটি divide() মেথড রয়েছে, যা দুইটি সংখ্যা বিভক্ত করার চেষ্টা করে এবং যদি দ্বিতীয় সংখ্যাটি শূন্য হয়, তবে এটি ArithmeticException থ্রো করবে। আমরা টেস্ট করতে চাই যে, শূন্য দ্বারা বিভাজন করার সময় ArithmeticException থ্রো হচ্ছে কি না।
কোড উদাহরণ:
public class Calculator {
// Method to divide two numbers
public int divide(int a, int b) {
if (b == 0) {
throw new ArithmeticException("Cannot divide by zero");
}
return a / b;
}
}
এখন, আমরা এই কোডটি টেস্ট করার জন্য একটি JUnit টেস্ট লিখব, যাতে নিশ্চিত হওয়া যায় যে, শূন্য দ্বারা বিভাজন করলে ArithmeticException থ্রো হচ্ছে।
JUnit Test উদাহরণ:
import org.junit.Test;
public class CalculatorTest {
@Test(expected = ArithmeticException.class)
public void testDivideByZero() {
Calculator calculator = new Calculator();
// This should throw an ArithmeticException because division by zero is not allowed
calculator.divide(10, 0);
}
}
এখানে:
- testDivideByZero() মেথডে
calculator.divide(10, 0)কল করা হয়েছে, যা ArithmeticException থ্রো করবে, কারণ দ্বিতীয় প্যারামিটার 0। - @Test(expected = ArithmeticException.class) ব্যবহার করা হয়েছে যাতে ArithmeticException থ্রো হলে টেস্ট সফল হবে।
৩. আরেকটি উদাহরণ: String to Integer Conversion
ধরা যাক, একটি convertToInt() মেথড রয়েছে, যা একটি স্ট্রিংকে Integer তে রূপান্তর করে। যদি স্ট্রিংটি একটি বৈধ পূর্ণসংখ্যা না হয়, তবে এটি NumberFormatException থ্রো করবে। আমরা এই এক্সেপশনটি টেস্ট করতে চাই।
কোড উদাহরণ:
public class StringConverter {
// Method to convert String to Integer
public int convertToInt(String str) {
return Integer.parseInt(str);
}
}
JUnit Test উদাহরণ:
import org.junit.Test;
public class StringConverterTest {
@Test(expected = NumberFormatException.class)
public void testConvertToIntInvalidString() {
StringConverter converter = new StringConverter();
// This should throw a NumberFormatException because "abc" is not a valid integer
converter.convertToInt("abc");
}
}
এখানে:
- testConvertToIntInvalidString() মেথডে
converter.convertToInt("abc")কল করা হয়েছে, যা NumberFormatException থ্রো করবে, কারণ "abc" একটি বৈধ পূর্ণসংখ্যা নয়। - @Test(expected = NumberFormatException.class) দ্বারা NumberFormatException এর জন্য টেস্ট সফল হবে।
৪. ข้อจำกัดของ @Test(expected = Exception.class)
- Multiple exceptions: আপনি যদি একাধিক এক্সেপশন পরীক্ষা করতে চান, তবে
expectedএর মাধ্যমে একমাত্র একটি এক্সেপশন নির্ধারণ করা সম্ভব। যদি একাধিক এক্সেপশন পরীক্ষা করতে চান, তবে আপনিtry-catchব্লক ব্যবহার করতে পারেন এবং অ্যাসার্ট করতে পারেন। - No exception: যদি আপনার কোডে কোনো এক্সেপশন থ্রো না হয়, তবে টেস্টটি ব্যর্থ হবে।
উদাহরণ: No exception scenario
@Test(expected = ArithmeticException.class)
public void testNoException() {
// This code does not throw any exception, so the test will fail
int result = 10 / 2;
}
এখানে, কোডটি কোনো এক্সেপশন থ্রো করবে না, এবং এই কারণে টেস্টটি ব্যর্থ হবে।
সারাংশ
JUnit এর @Test(expected = Exception.class) অ্যানোটেশনটি আপনাকে খুব সহজে টেস্ট করতে সাহায্য করে যে, আপনার কোড একটি নির্দিষ্ট exception থ্রো করবে কি না। এটি unit testing-এ বিশেষভাবে সহায়ক, যখন আপনি নিশ্চিত হতে চান যে কোনো নির্দিষ্ট ত্রুটি বা এক্সেপশন সঠিকভাবে ট্রিগার হচ্ছে। এর মাধ্যমে, আপনি সহজেই অ্যাসার্ট করতে পারেন যে আপনার কোড সঠিকভাবে exception handling করছে।