JUnit একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা Java প্রোগ্রামিং ভাষায় ইউনিট টেস্টিং পরিচালনা করতে ব্যবহৃত হয়। assertThrows() মেথডটি JUnit 5 তে একটি বিশেষ ফিচার হিসেবে আসে যা আপনি যখন কোন এক্সেপশন (Exception) ফেলে থাকে এমন কোড টেস্ট করতে চান, তখন ব্যবহার করা হয়। এটি আপনাকে নির্দিষ্ট এক্সেপশনটি সত্যিই ফেলা হচ্ছে কি না, তা পরীক্ষা করতে সহায়তা করে।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে assertThrows() ব্যবহার করে এক্সেপশন টেস্ট করা যায়।
১. assertThrows() এর ব্যবহার
assertThrows() মেথডটি একটি ল্যাম্বডা এক্সপ্রেশন বা Executable গ্রহণ করে যা এক্সেপশন উৎপন্ন করতে পারে এবং এরপর এটি যাচাই করে যে নির্দিষ্ট এক্সেপশনটি আসছে কিনা।
Syntax:
assertThrows(Class<T> expectedType, Executable executable);
- expectedType: যেই এক্সেপশনটি আপনি পরীক্ষা করতে চান, তা
Class<T>টাইপের হতে হবে। - executable: একটি কোড ব্লক (যা ল্যাম্বডা এক্সপ্রেশন বা কোনো মেথড রেফারেন্স হতে পারে) যা এক্সেপশনটি ফেলে।
২. assertThrows() এর মাধ্যমে এক্সেপশন টেস্ট করার উদাহরণ
ধরা যাক, আমাদের একটি ক্লাস Calculator রয়েছে যা দুটি সংখ্যার ভাগ করার কাজ করে, কিন্তু ভাগফল যদি শূন্য দ্বারা করা হয়, তবে এটি একটি 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;
}
}
এখন, আমরা Calculator ক্লাসের divide() মেথডের উপর টেস্ট তৈরি করতে যাচ্ছি, যাতে শূন্য দ্বারা ভাগ করার সময় ArithmeticException এক্সেপশনটি ফেলা হচ্ছে কিনা তা যাচাই করা যায়।
CalculatorTest.java:
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;
public class CalculatorTest {
@Test
public void testDivideByZero() {
Calculator calculator = new Calculator();
// Test for ArithmeticException
assertThrows(ArithmeticException.class, () -> calculator.divide(10, 0));
}
}
এখানে:
- assertThrows(ArithmeticException.class, () -> calculator.divide(10, 0)); এই লাইনটি পরীক্ষা করছে যে divide(10, 0) কল করলে কি ArithmeticException এক্সেপশনটি ঘটছে কিনা।
- ArithmeticException.class হলো প্রত্যাশিত এক্সেপশন টাইপ এবং () -> calculator.divide(10, 0) হলো কোড ব্লক যা এক্সেপশনটি ফেলে।
৩. assertThrows() ব্যবহার করে কাস্টম এক্সেপশন টেস্ট করা
এখন, যদি আমরা একটি কাস্টম এক্সেপশন তৈরি করি, যেমন InvalidInputException, তবে আমরা সেটাও assertThrows() ব্যবহার করে পরীক্ষা করতে পারি।
InvalidInputException.java:
public class InvalidInputException extends RuntimeException {
public InvalidInputException(String message) {
super(message);
}
}
Calculator.java (আপডেটেড):
public class Calculator {
public int divide(int a, int b) {
if (b < 0) {
throw new InvalidInputException("Cannot divide by negative number");
}
return a / b;
}
}
এখন, আমরা InvalidInputException এক্সেপশন টেস্ট করতে যাচ্ছি।
CalculatorTest.java (আপডেটেড):
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;
public class CalculatorTest {
@Test
public void testDivideByNegative() {
Calculator calculator = new Calculator();
// Test for InvalidInputException
assertThrows(InvalidInputException.class, () -> calculator.divide(10, -2));
}
}
এখানে:
- InvalidInputException.class হলো আমাদের কাস্টম এক্সেপশন টাইপ এবং () -> calculator.divide(10, -2) হলো কোড ব্লক যা কাস্টম এক্সেপশনটি ফেলে।
৪. assertThrows() এর আরো কিছু গুরুত্বপূর্ণ ব্যবহার
৪.১ Error Message Assertion
এছাড়া, আপনি assertThrows() এর মাধ্যমে এক্সেপশনের বার্তা যাচাইও করতে পারেন। এই কাজটি করতে আপনি assertThrows() এর পরে getMessage() মেথড ব্যবহার করতে পারেন।
@Test
public void testDivideByZeroErrorMessage() {
Calculator calculator = new Calculator();
ArithmeticException exception = assertThrows(ArithmeticException.class, () -> calculator.divide(10, 0));
// Verify exception message
assertEquals("Cannot divide by zero", exception.getMessage());
}
এখানে, আমরা নিশ্চিত করছি যে এক্সেপশনটির বার্তা "Cannot divide by zero"।
সারাংশ
assertThrows() মেথডটি JUnit 5 তে ব্যবহৃত একটি শক্তিশালী টুল, যা আপনাকে পরীক্ষার সময় বিশেষ ধরনের এক্সেপশন ফেলা হচ্ছে কিনা তা নিশ্চিত করতে সহায়তা করে। এটি সাধারণত Exception Testing এর জন্য ব্যবহৃত হয়, যেখানে আপনার কোড নির্দিষ্ট এক্সেপশনটি ফেলবে কিনা, তা নিশ্চিত করা প্রয়োজন। assertThrows() সহজেই ArithmeticException, InvalidInputException অথবা কাস্টম এক্সেপশন টেস্ট করতে ব্যবহৃত হতে পারে, এবং এর মাধ্যমে আপনি এক্সেপশনের বার্তা এবং ধরণ উভয়ই পরীক্ষা করতে পারেন।
Read more