JUnit হল Java প্রোগ্রামিং ভাষায় ব্যবহৃত একটি জনপ্রিয় ইউনিট টেস্টিং ফ্রেমওয়ার্ক, যা কোডের বিভিন্ন অংশ পরীক্ষা করার জন্য ব্যবহৃত হয়। যখন আপনি JUnit টেস্ট চালান, তখন আপনি নিশ্চিত হতে পারেন যে আপনার কোডের গুরুত্বপূর্ণ অংশগুলো সঠিকভাবে কাজ করছে। তবে, ইউনিট টেস্টের কার্যকারিতা এবং ব্যাপ্তি মূল্যায়ন করতে Test Coverage একটি গুরুত্বপূর্ণ বিষয়। JaCoCo হল একটি কোড কভারেজ টুল, যা JUnit টেস্টের মাধ্যমে পরীক্ষা করা কোডের কতটা অংশ কভার হয়েছে তা দেখানোর জন্য ব্যবহৃত হয়।
এই টিউটোরিয়ালে, আমরা দেখব কীভাবে JUnit টেস্টের সাথে JaCoCo ব্যবহার করে টেস্ট কভারেজ এনালাইসিস করা যায়।
১. JaCoCo কী?
JaCoCo (Java Code Coverage) হল একটি ওপেন সোর্স টুল যা JUnit টেস্টের মাধ্যমে আপনার কোডের কভারেজ পরিমাপ করে। এটি সঠিকভাবে বুঝতে সাহায্য করে যে আপনার টেস্ট কোডের কতটা অংশ পরীক্ষা করছে এবং কোথায় আরও টেস্ট যুক্ত করা প্রয়োজন। JaCoCo কভারেজের মধ্যে অন্তর্ভুক্ত থাকে:
- Line Coverage: কোডের কতটি লাইন পরীক্ষা হয়েছে।
- Branch Coverage: কোডের কতটি শাখা পরীক্ষা হয়েছে।
- Method Coverage: কোডের কতটি মেথড পরীক্ষা হয়েছে।
২. JaCoCo সেটআপ
JUnit টেস্টের কভারেজ পরিমাপ করতে JaCoCo ব্যবহার করতে হলে, প্রথমে Maven বা Gradle প্রোজেক্টে JaCoCo প্লাগইন যুক্ত করতে হবে।
২.১ Maven প্রোজেক্টে JaCoCo সেটআপ
pom.xml ফাইলে JaCoCo Plugin যুক্ত করতে হবে:
<build>
<plugins>
<!-- JaCoCo Maven Plugin -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<executions>
<execution>
<phase>test</phase> <!-- Running JaCoCo during the test phase -->
<goals>
<goal>prepare-agent</goal> <!-- Prepare JaCoCo agent before running tests -->
</goals>
</execution>
<execution>
<phase>verify</phase> <!-- After tests, JaCoCo generates the coverage report -->
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
এখানে, jacoco-maven-plugin প্লাগইন ব্যবহার করা হয়েছে, যা Maven এর test ফেজ চলাকালীন JaCoCo এজেন্ট প্রস্তুত করবে এবং verify ফেজে কভারেজ রিপোর্ট তৈরি করবে।
২.২ Gradle প্রোজেক্টে JaCoCo সেটআপ
build.gradle ফাইলে JaCoCo Plugin যুক্ত করতে হবে:
plugins {
id 'java'
id 'jacoco'
}
jacoco {
toolVersion = "0.8.7" // Specify JaCoCo tool version
}
test {
useJUnitPlatform() // Use JUnit Platform
finalizedBy jacocoTestReport // Generate JaCoCo report after tests
}
jacocoTestReport {
dependsOn test
reports {
xml.enabled = true
html.enabled = true
}
}
এখানে, jacoco প্লাগইনটি Gradle প্রোজেক্টে যুক্ত করা হয়েছে এবং test টাস্কের শেষে JaCoCo রিপোর্ট জেনারেট করা হবে।
৩. JUnit টেস্ট কোডের উদাহরণ
এখন, JUnit টেস্ট কোডের উদাহরণ দিচ্ছি, যাতে আমরা JaCoCo এর মাধ্যমে টেস্ট কভারেজ পরিমাপ করতে পারি।
উদাহরণ: Simple Calculator Class
Calculator.java (ডোমেইন ক্লাস):
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public int divide(int a, int b) {
if (b == 0) {
throw new IllegalArgumentException("Cannot divide by zero");
}
return a / b;
}
}
এখানে, Calculator ক্লাসের চারটি মেথড রয়েছে: add(), subtract(), multiply(), এবং divide()। এখন, আমরা এই মেথডগুলির জন্য JUnit টেস্ট লিখব।
উদাহরণ: JUnit Test for Calculator
CalculatorTest.java (JUnit টেস্ট ক্লাস):
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class CalculatorTest {
private final Calculator calculator = new Calculator();
@Test
public void testAdd() {
assertEquals(5, calculator.add(2, 3));
}
@Test
public void testSubtract() {
assertEquals(1, calculator.subtract(3, 2));
}
@Test
public void testMultiply() {
assertEquals(6, calculator.multiply(2, 3));
}
@Test
public void testDivide() {
assertEquals(2, calculator.divide(6, 3));
}
@Test
public void testDivideByZero() {
assertThrows(IllegalArgumentException.class, () -> calculator.divide(1, 0));
}
}
এখানে, JUnit টেস্টে add(), subtract(), multiply(), এবং divide() মেথডগুলির জন্য বিভিন্ন টেস্ট কেস তৈরি করা হয়েছে, এবং divideByZero টেস্ট কেসে শূন্য দ্বারা ভাগ করার সময় IllegalArgumentException ত্রুটি পরীক্ষা করা হয়েছে।
৪. JaCoCo Test Coverage Report
Maven বা Gradle এর মাধ্যমে টেস্ট চালানোর পর JaCoCo স্বয়ংক্রিয়ভাবে কোড কভারেজ রিপোর্ট তৈরি করবে। JaCoCo রিপোর্ট সাধারণত target/site/jacoco (Maven) অথবা build/reports/jacoco/test/html (Gradle) ফোল্ডারে পাওয়া যায়। আপনি রিপোর্টের মধ্যে নিম্নলিখিত কভারেজ ডেটা দেখতে পারবেন:
- Line Coverage: কতটি কোড লাইন পরীক্ষা করা হয়েছে।
- Branch Coverage: কোডের শাখাগুলির মধ্যে কতটি পরীক্ষা করা হয়েছে।
- Method Coverage: কতটি মেথড পরীক্ষা করা হয়েছে।
JaCoCo HTML Report Example:
| Class Name | Line Coverage | Branch Coverage | Method Coverage |
|------------------|---------------|-----------------|-----------------|
| Calculator | 90% | 75% | 100% |
এখানে, Calculator ক্লাসের 90% লাইন এবং 75% শাখা কভার হয়েছে, তবে সমস্ত মেথড 100% কভার হয়েছে।
৫. JaCoCo রিপোর্টের মাধ্যমে Coverage Analysis
JaCoCo রিপোর্ট থেকে আপনি জানতে পারবেন কোন কোড অংশটি সঠিকভাবে পরীক্ষা হয়েছে এবং কোন অংশে টেস্ট কভারেজ নেই। এর মাধ্যমে আপনি আপনার টেস্ট কেসগুলির মধ্যে কোনো গ্যাপ চিহ্নিত করতে পারবেন এবং প্রয়োজনীয় টেস্ট কভারেজ অ্যাড করতে পারবেন। এটি উন্নত কোড কভারেজ এবং কোড কোয়ালিটি নিশ্চিত করতে সহায়তা করে।
সারাংশ
JaCoCo একটি অত্যন্ত কার্যকরী টুল যা JUnit টেস্ট কভারেজ পরিমাপ করতে ব্যবহৃত হয়। এটি Maven বা Gradle এর মাধ্যমে সহজে ইন্টিগ্রেট করা যায় এবং test ফেজের পরে কোড কভারেজ রিপোর্ট তৈরি করে। JaCoCo রিপোর্টের মাধ্যমে আপনি আপনার কোডের কভারেজ পর্যবেক্ষণ করতে পারেন এবং টেস্ট কভারেজ বাড়ানোর জন্য প্রয়োজনীয় টেস্ট কেস যুক্ত করতে পারেন।
Read more