কিছু ক্ষেত্রে ইচ্ছাকৃতভাবে একটি টেস্টকে ব্যর্থ করার প্রয়োজন হতে পারে, যেমন কোনো নির্দিষ্ট ব্যতিক্রমের (exception) যাচাই করা, নতুন টেস্ট কেস ডেভেলপমেন্টের সময় ডিফেক্ট রিপোর্ট করা, বা এমন পরিস্থিতি তৈরি করা যেখানে টেস্ট ব্যর্থ হওয়ার সম্ভাবনা থাকে। TestNG এই ধরনের টেস্ট পরিচালনার জন্য কার্যকরী সমাধান প্রদান করে।
ইচ্ছাকৃত ব্যর্থ টেস্ট পরিচালনার পদ্ধতি
TestNG-তে টেস্টকে ইচ্ছাকৃতভাবে ব্যর্থ করার জন্য দুটি প্রধান পদ্ধতি ব্যবহার করা হয়:
- Assertion ব্যবহার করে ব্যর্থ টেস্ট তৈরি
- ExpectedExceptions ব্যবহার করে ব্যতিক্রম পরিচালনা
Assertion ব্যবহার করে ইচ্ছাকৃত টেস্ট ব্যর্থ করা
TestNG-তে Assertions ব্যবহার করে ইচ্ছাকৃত টেস্ট ব্যর্থ করা সম্ভব। যদি কোনও Assertion ব্যর্থ হয়, তাহলে টেস্টটিকে ব্যর্থ বলে গণ্য করা হয়।
উদাহরণ:
import org.testng.Assert;
import org.testng.annotations.Test;
public class IntentionalFailTest {
@Test
public void failWithAssertion() {
int expected = 5;
int actual = 10;
Assert.assertEquals(actual, expected, "Actual এবং Expected সমান নয়!");
}
}
ব্যাখ্যা:
- এখানে
Assert.assertEqualsব্যবহার করে চেক করা হয়েছে যেactualএবংexpectedভ্যালু সমান কিনা। - যদি ভ্যালুগুলো সমান না হয়, তবে Assertion ব্যর্থ হবে এবং টেস্ট ব্যর্থ হবে।
ExpectedExceptions ব্যবহার করে ব্যতিক্রম পরিচালনা
TestNG-তে @Test অ্যানোটেশনের expectedExceptions প্যারামিটার ব্যবহার করে আপনি নির্দিষ্ট ব্যতিক্রমের জন্য টেস্ট পরিচালনা করতে পারেন। যদি সেই ব্যতিক্রম না ঘটে, তবে টেস্টটি ব্যর্থ বলে গণ্য হবে।
উদাহরণ:
import org.testng.annotations.Test;
public class ExpectedExceptionTest {
@Test(expectedExceptions = ArithmeticException.class)
public void failWithException() {
System.out.println("ব্যতিক্রম ঘটার চেষ্টা চলছে...");
int result = 10 / 0; // এটি ArithmeticException তৈরি করবে।
}
}
ব্যাখ্যা:
expectedExceptionsপ্যারামিটারArithmeticExceptionসেট করা হয়েছে।- যদি
ArithmeticExceptionঘটে, টেস্ট সফল হবে। অন্যথায়, এটি ব্যর্থ বলে গণ্য হবে।
ইচ্ছাকৃত ব্যর্থ টেস্টের জন্য fail() মেথড
TestNG সরাসরি একটি টেস্টকে ব্যর্থ করতে Assert.fail() মেথড প্রদান করে। এটি সাধারণত টেস্ট ডেভেলপমেন্ট বা টেম্পরারি ফ্লো কন্ট্রোলের জন্য ব্যবহৃত হয়।
উদাহরণ:
import org.testng.Assert;
import org.testng.annotations.Test;
public class FailMethodTest {
@Test
public void failUsingFailMethod() {
System.out.println("টেস্ট ইচ্ছাকৃতভাবে ব্যর্থ করা হচ্ছে...");
Assert.fail("এই টেস্ট ইচ্ছাকৃতভাবে ব্যর্থ করা হয়েছে!");
}
}
আউটপুট:
টেস্ট চলাকালীন Assert.fail() মেথডের কারণে টেস্ট ব্যর্থ হবে এবং প্রাসঙ্গিক মেসেজ রিপোর্টে দেখানো হবে।
টেস্ট স্কিপ করার জন্য SkipException
যদি আপনি কোনো টেস্ট কেস ব্যর্থ না করে সেটিকে স্কিপ করতে চান, তবে TestNG-র SkipException ব্যবহার করা হয়। এটি ইচ্ছাকৃতভাবে টেস্ট স্কিপ করার একটি কার্যকর পদ্ধতি।
উদাহরণ:
import org.testng.SkipException;
import org.testng.annotations.Test;
public class SkipTestExample {
@Test
public void skipTest() {
System.out.println("টেস্ট স্কিপ করা হচ্ছে...");
throw new SkipException("এই টেস্টটি স্কিপ করা হয়েছে!");
}
}
আউটপুট:
TestNG এই টেস্টটিকে স্কিপ করবে এবং রিপোর্টে "Skipped" হিসেবে চিহ্নিত করবে।
ইচ্ছাকৃত ব্যর্থ টেস্ট ব্যবহারের ক্ষেত্র
- ডিফেক্ট যাচাই: কোনো নির্দিষ্ট বাগ বা ডিফেক্ট পরীক্ষা করতে টেস্ট ব্যর্থ করা।
- ব্যতিক্রম যাচাই: সঠিক ব্যতিক্রমের কেস তৈরি এবং পরিচালনা।
- টেস্ট ডেভেলপমেন্ট: ডেভেলপমেন্ট চলাকালীন টেস্টকে ইচ্ছাকৃতভাবে ব্যর্থ করা।
- ফিচার স্কোপ: নতুন ফিচারের টেস্ট ডেভেলপ করার সময় অস্থায়ী টেস্ট ব্যর্থতা তৈরি।
সারাংশ
TestNG-তে ইচ্ছাকৃত টেস্ট ব্যর্থ করার জন্য Assertions, ExpectedExceptions, এবং Assert.fail() মেথড ব্যবহার করা হয়। এই পদ্ধতিগুলো টেস্ট ডেভেলপমেন্ট ও ডিফেক্ট যাচাই প্রক্রিয়ায় কার্যকর। সঠিক পদ্ধতি নির্বাচন আপনার টেস্টিং স্ট্র্যাটেজিকে আরও সুসংগঠিত এবং নির্ভরযোগ্য করে তোলে।
TestNG একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা বিভিন্ন ধরনের টেস্ট চালাতে সহায়তা করে। এর মধ্যে রয়েছে একাধিক অ্যানোটেশন, যার মাধ্যমে টেস্ট কেস কনফিগার করা যায়। এই অ্যানোটেশনগুলির মধ্যে একটি গুরুত্বপূর্ণ অ্যানোটেশন হলো @Test(expectedExceptions=""), যার মাধ্যমে আমরা এমন টেস্ট কেস তৈরি করতে পারি যেগুলো নির্দিষ্ট কিছু এক্সসেপশন (exceptions) আশা করে, এবং সেই এক্সসেপশনগুলির কারণে টেস্টটি ব্যর্থ হতে পারে।
@Test(expectedExceptions="") এর কার্যপদ্ধতি
@Test(expectedExceptions="") অ্যানোটেশনটি ব্যবহার করে, আপনি নির্দিষ্ট এক্সসেপশনগুলো টেস্ট কেসে আশা করতে পারেন। এই অ্যানোটেশনটি বলে দেয় যে, নির্দিষ্ট এক্সসেপশনটি যদি টেস্ট চলাকালীন ঘটে, তাহলে টেস্টটি সফল বলে গণ্য হবে। অন্যদিকে, যদি সেই এক্সসেপশন না ঘটে, তাহলে টেস্টটি ব্যর্থ হবে।
উদাহরণ:
ধরা যাক, আপনার কাছে এমন একটি মেথড রয়েছে যা ডিভাইড (divide) অপারেশন করে, এবং শূন্য দিয়ে ভাগ করার সময় এক্সসেপশন ঘটায়।
import org.testng.annotations.Test;
public class TestExample {
public int divide(int a, int b) {
return a / b;
}
@Test(expectedExceptions = ArithmeticException.class)
public void testDivideByZero() {
divide(10, 0); // এখানে ArithmeticException ঘটবে
}
}
এখানে, @Test(expectedExceptions = ArithmeticException.class) উল্লেখ করা হয়েছে, যার মাধ্যমে টেস্টটি সফল হবে যদি ArithmeticException ঘটে। যদি কোনো এক্সসেপশন না ঘটে, তাহলে টেস্টটি ব্যর্থ হবে।
ব্যর্থ টেস্ট পরিচালনা
@Test(expectedExceptions="") অ্যানোটেশনটি ব্যবহার করলে আপনি নিশ্চিত করতে পারেন যে, আপনার টেস্ট কেসটি সঠিকভাবে ব্যর্থ হচ্ছে যখন প্রত্যাশিত এক্সসেপশন ঘটে। এটি বিশেষ করে গুরুত্বপূর্ণ যখন আপনি চাইছেন কোনো নির্দিষ্ট এক্সসেপশন সঠিকভাবে হ্যান্ডল হচ্ছে কিনা তা যাচাই করতে।
এভাবে আপনি TestNG এর @Test(expectedExceptions="") অ্যানোটেশন ব্যবহার করে ব্যর্থ টেস্ট পরিচালনা করতে পারবেন, যা নিশ্চিত করবে যে আপনার কোডে সঠিক এক্সসেপশনগুলি ঘটছে এবং সেগুলি ঠিকভাবে পরিচালিত হচ্ছে।
Exception Handling কি?
TestNG টেস্টিংয়ের সময় ব্যতিক্রম (Exception) পরিচালনার জন্য উন্নত ফিচার সরবরাহ করে। এটি এমন টেস্ট কেস তৈরি করতে সাহায্য করে, যেখানে নির্দিষ্ট ব্যতিক্রম প্রত্যাশিত বা যাচাই করতে হয়। TestNG-এর expectedExceptions প্যারামিটার ব্যবহার করে নির্দিষ্ট ব্যতিক্রম পরিচালনা করা যায়।
Exception Handling-এর উপায়
১. expectedExceptions ব্যবহার করে নির্দিষ্ট Exception যাচাই
@Test অ্যানোটেশনের expectedExceptions প্যারামিটার ব্যবহার করে টেস্ট মেথডটি কোন ব্যতিক্রম ছুঁড়বে তা পূর্বেই নির্ধারণ করা যায়।
সিনট্যাক্স:
@Test(expectedExceptions = ExceptionClass.class)
public void testMethod() {
// টেস্ট লজিক
}
Exception Handling-এর উদাহরণ
সাধারণ Exception Handling
import org.testng.annotations.Test;
public class ExceptionTest {
@Test(expectedExceptions = ArithmeticException.class)
public void testDivisionByZero() {
int result = 10 / 0; // এটি ArithmeticException ছুঁড়বে
System.out.println("Result: " + result);
}
}
বর্ণনা:
- টেস্ট মেথডে ১০ কে ০ দিয়ে ভাগ করা হয়েছে, যা
ArithmeticExceptionছুঁড়ে। expectedExceptionsপ্যারামিটার দিয়ে নিশ্চিত করা হয়েছে যে এই ব্যতিক্রমটি প্রত্যাশিত।
একাধিক ব্যতিক্রম পরিচালনা
import org.testng.annotations.Test;
public class MultiExceptionTest {
@Test(expectedExceptions = {ArithmeticException.class, NullPointerException.class})
public void testMultipleExceptions() {
String str = null;
System.out.println(str.length()); // এটি NullPointerException ছুঁড়বে
}
}
বর্ণনা:
- এখানে একাধিক ব্যতিক্রম (
ArithmeticException,NullPointerException) টেস্টে গ্রহণযোগ্য হিসাবে নির্ধারণ করা হয়েছে। - যদি উল্লিখিত ব্যতিক্রমগুলির যেকোনো একটি ঘটে, তবে টেস্ট পাস করবে।
নির্দিষ্ট ব্যতিক্রমের সাথে বার্তা যাচাই
import org.testng.annotations.Test;
import org.testng.Assert;
public class SpecificExceptionTest {
@Test
public void testSpecificExceptionMessage() {
try {
int result = 10 / 0; // ArithmeticException
} catch (ArithmeticException e) {
Assert.assertEquals(e.getMessage(), "/ by zero", "Exception message does not match!");
}
}
}
বর্ণনা:
try-catchব্লক ব্যবহার করে ব্যতিক্রমটি ধরা হয়েছে।- ব্যতিক্রমের বার্তা
Assert.assertEquals()দিয়ে যাচাই করা হয়েছে।
Exception Handling-এর ব্যবহার ক্ষেত্রে
- ব্যতিক্রম যাচাই:
যেসব কোড অংশ ব্যতিক্রম তৈরি করতে পারে, সেগুলো সঠিকভাবে পরিচালনা এবং যাচাই করার জন্য। - রেসিলিয়েন্ট কোড:
এমন পরিস্থিতিতে, যেখানে ব্যতিক্রমের ফলে অ্যাপ্লিকেশন বা টেস্ট ব্যর্থ হতে পারে, তা এড়ানোর জন্য। - নির্দিষ্ট ব্যতিক্রম পরীক্ষাঃ
নিশ্চিত করা যে একটি নির্দিষ্ট ব্যতিক্রম ঘটে এবং তা সঠিকভাবে পরিচালিত হয়।
উপসংহার
TestNG-এর Exception Handling ফিচার ব্যবহার করে নির্দিষ্ট ব্যতিক্রম যাচাই এবং পরিচালনা করা যায়। এটি টেস্ট কেসকে আরও নির্ভরযোগ্য করে এবং ব্যতিক্রম ব্যবস্থাপনায় কার্যকর সমাধান প্রদান করে।
TestNG-তে Expected Exception Handling ফিচারটি ব্যবহার করে টেস্ট কেসে একটি নির্দিষ্ট এক্সেপশন (Exception) ঘটবে বলে প্রত্যাশা করা হয় এবং টেস্ট কেসটি সেই এক্সেপশন পেলে পাস (Pass) করে। এটি সাধারণত নেগেটিভ টেস্টিং বা কোডের ব্যতিক্রমী পরিস্থিতি যাচাই করার জন্য ব্যবহৃত হয়।
Expected Exception Handling এর প্রয়োজনীয়তা
- যখন টেস্ট কেসে একটি নির্দিষ্ট এক্সেপশন ঘটার সম্ভাবনা থাকে, তখন এই ফিচারটি ব্যবহার করা হয়।
- এটি নিশ্চিত করে যে অ্যাপ্লিকেশন সঠিকভাবে ব্যতিক্রম (Exception) হ্যান্ডেল করছে কিনা।
Expected Exception Handling এর সিনট্যাক্স
TestNG-তে @Test অ্যানোটেশনের expectedExceptions অ্যাট্রিবিউট ব্যবহার করে এক্সেপশন হ্যান্ডল করা হয়।
@Test(expectedExceptions = Exception.class)
public void testMethod() {
// Test code
}
উদাহরণ: Expected Exception Handling
উদাহরণ ১: ArithmeticException হ্যান্ডল করা
import org.testng.annotations.Test;
public class ExceptionHandlingExample {
@Test(expectedExceptions = ArithmeticException.class)
public void testDivisionByZero() {
int result = 10 / 0; // This will throw ArithmeticException
System.out.println("Result: " + result);
}
}
বর্ণনা:
10 / 0কোডটিArithmeticExceptionতৈরি করবে।- যেহেতু এটি টেস্ট কেসে
expectedExceptions = ArithmeticException.classব্যবহার করা হয়েছে, তাই টেস্ট পাস করবে।
উদাহরণ ২: Custom Exception হ্যান্ডল করা
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
import org.testng.annotations.Test;
public class CustomExceptionExample {
@Test(expectedExceptions = CustomException.class)
public void testCustomException() throws CustomException {
throw new CustomException("This is a custom exception.");
}
}
বর্ণনা:
- এখানে কাস্টম এক্সেপশন
CustomExceptionতৈরি করা হয়েছে। - টেস্ট কেসে এটি প্রত্যাশা করা হয়েছে, তাই এটি পাস করবে।
Expected Exception Handling এর সাথে বার্তা যাচাই
TestNG শুধুমাত্র এক্সেপশন নয়, সেই এক্সেপশনের বার্তাও যাচাই করার সুযোগ দেয়।
উদাহরণ ৩: এক্সেপশনের বার্তা যাচাই
import org.testng.annotations.Test;
public class ExceptionMessageExample {
@Test(expectedExceptions = ArithmeticException.class)
public void testExceptionMessage() {
try {
int result = 10 / 0; // This will throw ArithmeticException
} catch (ArithmeticException e) {
assert e.getMessage().contains("/ by zero");
throw e; // Re-throwing the exception for TestNG to handle
}
}
}
বর্ণনা:
assert e.getMessage().contains("/ by zero")দিয়ে এক্সেপশনের বার্তা যাচাই করা হয়েছে।- বার্তা মিলে গেলে এবং
ArithmeticExceptionঘটলে টেস্ট পাস করবে।
Expected Exception Handling এর সীমাবদ্ধতা
- শুধুমাত্র নির্দিষ্ট এক্সেপশন যাচাই করা যায়।
- যদি এক্সেপশন না ঘটে, তবে টেস্ট ব্যর্থ হবে।
- এক্সেপশনের নির্দিষ্ট বার্তা যাচাই করতে হলে অতিরিক্ত লজিক প্রয়োজন।
Expected Exception Handling: সঠিক এবং ভুল উদাহরণ
সঠিক উদাহরণ:
@Test(expectedExceptions = NullPointerException.class)
public void testNullPointer() {
String str = null;
str.length(); // Throws NullPointerException
}
ভুল উদাহরণ:
@Test(expectedExceptions = ArithmeticException.class)
public void testWrongException() {
int result = 10 / 2; // No exception occurs
System.out.println("Result: " + result);
}
বর্ণনা:
- এখানে কোনো এক্সেপশন ঘটেনি, তাই টেস্ট ব্যর্থ হবে।
Expected Exception Handling এর ব্যবহার ক্ষেত্র
- নেগেটিভ টেস্টিং: যেখানে কোডকে ভুল ইনপুট দিয়ে পরীক্ষা করা হয়।
- ইনপুট যাচাইকরণ: ব্যবহারকারীর অবৈধ ইনপুটে কীভাবে কোড কাজ করে তা যাচাই করা।
- ব্যতিক্রম হ্যান্ডলিং: কোড ব্যতিক্রমগুলোর জন্য সঠিক বার্তা বা আচরণ প্রদান করছে কিনা তা নিশ্চিত করা।
সারাংশ
TestNG-র Expected Exception Handling ফিচারটি টেস্টিং প্রক্রিয়াকে আরও শক্তিশালী করে। এটি নিশ্চিত করে যে কোড সঠিকভাবে এক্সেপশন হ্যান্ডেল করছে এবং প্রত্যাশিত পরিস্থিতিতে সঠিক ফলাফল দিচ্ছে। TestNG-তে expectedExceptions ব্যবহার করে সহজে এই ফিচারটি ব্যবহার করা যায়।
Read more