TestNG-তে Test Coverage
Test Coverage হল একটি মেট্রিক যা কোডের কত অংশ টেস্ট কেসের মাধ্যমে কভার করা হয়েছে তা পরিমাপ করে। এটি টেস্টিং প্রক্রিয়ায় ব্যবহৃত হয়, যাতে নিশ্চিত করা যায় যে প্রোগ্রামের গুরুত্বপূর্ণ অংশগুলো সঠিকভাবে পরীক্ষা করা হয়েছে এবং কোন কোড অংশ বাদ পড়েনি।
TestNG স্বয়ংক্রিয়ভাবে রিপোর্ট তৈরি করে, কিন্তু Test Coverage মাপার জন্য আপনাকে অন্য টুল যেমন JaCoCo বা Cobertura ব্যবহার করতে হবে।
Test Coverage মাপতে JaCoCo ব্যবহার:
JaCoCo একটি জনপ্রিয় Java code coverage টুল যা Maven বা Gradle এর সাথে ইন্টিগ্রেট করা যায়।
JaCoCo ইনস্টলেশন: Maven প্রোজেক্টে JaCoCo ইন্টিগ্রেট করতে
pom.xmlফাইলে নিম্নলিখিত ডিপেনডেন্সি যুক্ত করুন:<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.7</version> <executions> <execution> <goals> <goal>prepare-agent</goal> <goal>report</goal> </goals> </execution> </executions> </plugin>- Coverage রিপোর্ট তৈরি:
mvn clean testরান করার পর target/site/jacoco/index.html ফাইলে রিপোর্ট দেখতে পাবেন।
TestNG-তে Assertion Management
Assertions হল টেস্টিংয়ের গুরুত্বপূর্ণ উপাদান যা টেস্টের সফলতা বা ব্যর্থতা নির্ধারণ করে। TestNG বিভিন্ন ধরনের assertion সমর্থন করে, যার মাধ্যমে আপনি টেস্টের ফলাফল যাচাই করতে পারেন। TestNG-তে assert স্টেটমেন্ট ব্যবহার করে, আপনি টেস্টের অবস্থান নির্ধারণ করতে পারেন।
সাধারণ Assertion উদাহরণ:
assertTrueএবংassertFalse:assertTrue(condition)— যদি কন্ডিশনটি সত্য হয়, টেস্ট পাস হবে।assertFalse(condition)— যদি কন্ডিশনটি মিথ্যা হয়, টেস্ট পাস হবে।
import org.testng.Assert;
import org.testng.annotations.Test;
public class AssertionExample {
@Test
public void testAssertTrue() {
Assert.assertTrue(5 > 3, "Condition is false");
}
@Test
public void testAssertFalse() {
Assert.assertFalse(5 < 3, "Condition is true");
}
}
assertEqualsএবংassertNotEquals:assertEquals(actual, expected)— যদি আসল মান (actual) প্রত্যাশিত মান (expected) এর সমান হয়, টেস্ট পাস হবে।assertNotEquals(actual, expected)— যদি আসল মান এবং প্রত্যাশিত মান আলাদা হয়, টেস্ট পাস হবে।
import org.testng.Assert;
import org.testng.annotations.Test;
public class AssertionExample {
@Test
public void testAssertEquals() {
Assert.assertEquals("TestNG", "TestNG", "Strings do not match");
}
@Test
public void testAssertNotEquals() {
Assert.assertNotEquals(5, 10, "Values are the same");
}
}
assertNullএবংassertNotNull:assertNull(object)— যদি অবজেক্টটি null হয়, টেস্ট পাস হবে।assertNotNull(object)— যদি অবজেক্টটি null না হয়, টেস্ট পাস হবে।
import org.testng.Assert;
import org.testng.annotations.Test;
public class AssertionExample {
@Test
public void testAssertNull() {
Object obj = null;
Assert.assertNull(obj, "Object is not null");
}
@Test
public void testAssertNotNull() {
Object obj = new Object();
Assert.assertNotNull(obj, "Object is null");
}
}
Assertion Management এর সুবিধা
- এফেক্টিভ ফলাফল যাচাই: TestNG assertions সরাসরি টেস্টের অবস্থার সঠিকতা যাচাই করে।
- সহজ ডিবাগিং: Assertion ব্যর্থ হলে স্পষ্ট মেসেজ প্রদান করে, যা ডিবাগিং সহজ করে।
- প্রতিটি টেস্টের ফলাফল: Assertion failures ব্যর্থ টেস্টগুলোর জন্য সুনির্দিষ্ট কারণ প্রদান করে।
TestNG-তে Exception Handling
Exception Handling এমন একটি প্রক্রিয়া যার মাধ্যমে আপনি কোডের ভুল বা ব্যতিক্রমী অবস্থা (exception) সনাক্ত এবং পরিচালনা করতে পারেন। TestNG-এ বিভিন্ন ধরণের exception handling করা যায় যেমন, expectedExceptions এবং try-catch ব্লক।
expectedExceptions অ্যানোটেশন
TestNG-এ @Test(expectedExceptions = Exception.class) অ্যানোটেশন ব্যবহার করে আপনি এমন টেস্ট মেথড লিখতে পারেন যা নির্দিষ্ট একটি exception প্রত্যাশা করে। যদি সেই exception নিক্ষিপ্ত হয়, তাহলে টেস্টটি পাস হিসেবে গণ্য হয়।
import org.testng.annotations.Test;
public class ExceptionHandlingExample {
@Test(expectedExceptions = ArithmeticException.class)
public void testDivisionByZero() {
int result = 10 / 0; // This will throw ArithmeticException
}
}
এখানে, testDivisionByZero মেথডে ArithmeticException প্রত্যাশা করা হয়েছে, এবং এটি ব্যর্থ হবে না যদি exceptionটি নিক্ষিপ্ত হয়।
try-catch ব্লক
TestNG-এ try-catch ব্লক ব্যবহার করে আপনি exception গুলি ম্যানুয়ালি হ্যান্ডল করতে পারেন এবং ফলস্বরূপ সেগুলির উপর নির্ভর করে assertion করতে পারেন।
import org.testng.Assert;
import org.testng.annotations.Test;
public class ExceptionHandlingExample {
@Test
public void testDivisionByZero() {
try {
int result = 10 / 0; // This will throw ArithmeticException
} catch (ArithmeticException e) {
Assert.assertTrue(true, "Caught expected ArithmeticException");
}
}
}
এখানে, testDivisionByZero মেথডে exception হ্যান্ডলিং করা হয়েছে এবং catch ব্লকে assertion করা হয়েছে।
Multiple Exceptions Handling
একই টেস্টে একাধিক exception handle করতে expectedExceptions ফিচার ব্যবহার করা যেতে পারে।
import org.testng.annotations.Test;
public class MultipleExceptionHandlingExample {
@Test(expectedExceptions = { ArithmeticException.class, NullPointerException.class })
public void testMultipleExceptions() {
int result = 10 / 0; // This will throw ArithmeticException
String str = null;
str.length(); // This will throw NullPointerException
}
}
এখানে, ArithmeticException এবং NullPointerException দুটি exception গ্রহণ করা হয়েছে।
TestNG-এ Exception Handling এর সুবিধা
- স্পষ্ট টেস্ট ফলাফল: কাস্টম exception হ্যান্ডলিংয়ের মাধ্যমে স্পষ্ট ফলাফল পাওয়া যায়।
- অনুমানযোগ্য ব্যতিক্রম: আপনি যদি নির্দিষ্ট exception গুলি প্রভাবিত করতে চান, তবে
expectedExceptionsব্যবহার করে তা পরিচালনা করতে পারেন। - ডিবাগিং এবং বিশ্লেষণ:
try-catchব্যবহার করলে exception এর সঠিক কারণ শনাক্ত করা সহজ হয়।
সারাংশ
TestNG-তে Test Coverage একটি গুরুত্বপূর্ণ মেট্রিক, যা কোডের কত অংশ পরীক্ষা করা হয়েছে তা পরিমাপ করে, কিন্তু এটি JaCoCo বা Cobertura এর মাধ্যমে অর্জন করা হয়। Assertion Management টেস্টের ফলাফল যাচাই করতে ব্যবহার করা হয় এবং Exception Handling ব্যতিক্রমী অবস্থাগুলির মোকাবেলা করতে সহায়ক। TestNG-র এই ফিচারগুলি আপনাকে কার্যকরী, নির্ভুল এবং স্কেলেবল টেস্ট কেস তৈরি করতে সাহায্য করে।
Read more