JUnit হল একটি Java টেস্টিং ফ্রেমওয়ার্ক যা আপনাকে ইউনিট টেস্ট লিখতে, পরিচালনা করতে এবং ফলাফল বিশ্লেষণ করতে সাহায্য করে। Parameterized Tests হল JUnit এর একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে একাধিক ইনপুট এবং আউটপুটের জন্য একই টেস্ট মেথড ব্যবহার করে টেস্ট করার সুবিধা দেয়। এটি বিশেষত যখন একই ধরনের টেস্ট একাধিক ভ্যালুর জন্য চালানো প্রয়োজন, তখন কার্যকরী।
১. Parameterized Tests কি?
Parameterized Tests হল একটি বিশেষ ধরনের টেস্ট যেখানে একটি একক টেস্ট মেথড একাধিক ইনপুটের সাথে রান হয়। এর মাধ্যমে, একই লজিকাল টেস্ট একাধিক ভ্যালুর উপর পরীক্ষা করা যায়। এর ফলে কোডের পুনরাবৃত্তি কমে এবং টেস্টের গঠন আরও পরিষ্কার হয়।
JUnit 4 তে Parameterized Tests ব্যবহারের জন্য @RunWith(Parameterized.class) এবং @Parameters অ্যানোটেশন ব্যবহার করা হয়।
২. Parameterized Tests এর সুবিধা
- Code Duplication কমানো: একাধিক ইনপুটের জন্য একই লজিকাল টেস্ট চালানো যায়, যার ফলে কোড পুনরাবৃত্তি এড়ানো যায়।
- Test Coverage বৃদ্ধি: একাধিক ভ্যালুর জন্য টেস্ট চালানো যায়, যা আপনার প্রোগ্রামের অন্যান্য অংশও পরীক্ষা করতে সহায়তা করে।
- Maintainability: যখন টেস্টে পরিবর্তন প্রয়োজন হয়, তখন একাধিক টেস্ট পরিবর্তন করার প্রয়োজন পড়ে না। শুধু একটি টেস্ট মেথডে পরিবর্তন করে বাকি সব কাজ হয়ে যায়।
৩. Parameterized Test এর উদাহরণ
ধরা যাক, আপনি একটি মেথড পরীক্ষা করতে চান যেটি দুটি সংখ্যা যোগ করে। আমরা এই টেস্টের জন্য parameterized test লিখব।
৩.১ Test Class:
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.Collection;
@RunWith(Parameterized.class)
public class CalculatorTest {
private int num1;
private int num2;
private int expectedSum;
// Constructor to initialize the test parameters
public CalculatorTest(int num1, int num2, int expectedSum) {
this.num1 = num1;
this.num2 = num2;
this.expectedSum = expectedSum;
}
// Parameters: providing different sets of values to test
@Parameterized.Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ 1, 2, 3 }, // Test case 1: 1 + 2 = 3
{ 3, 4, 7 }, // Test case 2: 3 + 4 = 7
{ -1, 1, 0 }, // Test case 3: -1 + 1 = 0
{ -5, -5, -10 } // Test case 4: -5 + -5 = -10
});
}
// Test method
@Test
public void testAdd() {
Calculator calculator = new Calculator();
assertEquals(expectedSum, calculator.add(num1, num2));
}
}
৩.২ Calculator Class:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
৩.৩ ব্যাখ্যা:
- @RunWith(Parameterized.class): এটি JUnit কে বলে যে এই ক্লাসটি Parameterized Test হবে এবং একাধিক ইনপুটের জন্য একই টেস্ট মেথড চালানো হবে।
- @Parameters: এই অ্যানোটেশনটি একটি স্ট্যাটিক মেথডের মাধ্যমে ইনপুট ডেটা প্রদান করে, যা একাধিক টেস্ট রানের জন্য ব্যবহৃত হয়। এখানে Arrays.asList() এর মাধ্যমে চারটি টেস্ট কেস প্রদান করা হয়েছে।
- Constructor: এই কনস্ট্রাক্টরের মাধ্যমে ইনপুট ডেটা (যেমন, দুইটি সংখ্যা এবং তাদের যোগফল) টেস্ট মেথডে পাঠানো হয়।
এখানে, testAdd() মেথডটি প্রতি ইনপুট সেটের জন্য চলে এবং প্রত্যাশিত যোগফল পরীক্ষা করে।
৪. Parameterized Test কিভাবে কাজ করে?
- @Parameters অ্যাডানোটেশন একটি স্ট্যাটিক মেথডে ইনপুট ডেটা প্রদান করে যা টেস্ট কেসের জন্য কাজ করবে।
- প্রতি টেস্ট রান হবে এবং testAdd() মেথডে ইনপুট প্যারামিটার পাঠানো হবে।
- প্রত্যেকটি ইনপুটের জন্য, Calculator ক্লাসের add() মেথডটি চালানো হবে এবং ফলাফল প্রত্যাশিত ফলাফলের সাথে তুলনা করা হবে।
৫. Parameterized Test এর সুবিধা
- Code Duplication কমানো: আপনি একাধিক ইনপুট এবং প্রত্যাশিত আউটপুটের জন্য একই টেস্ট মেথড ব্যবহার করতে পারেন, ফলে কোডের পুনরাবৃত্তি কমে যায়।
- Testing Various Scenarios: একাধিক ভ্যালু দিয়ে একটিই টেস্ট কেস চালানো যায়, যা আপনার কোডের স্টেবিলিটি এবং বিভিন্ন পরিস্থিতি পরীক্ষা করতে সহায়তা করে।
- Improved Readability: একাধিক টেস্ট কেস তৈরি না করে, একটি টেস্ট মেথডে ভিন্ন ভিন্ন ইনপুট দিয়ে আপনি কোডের পাঠযোগ্যতা বজায় রাখতে পারেন।
৬. Parameterized Tests এর ব্যবহার কৌশল
- Large Dataset Testing: যদি আপনার সিস্টেমে বড় ডেটাসেট থাকে, তবে আপনি সেই ডেটাসেটের ওপর একাধিক টেস্ট চালাতে পারবেন।
- Performance Testing: একাধিক কন্ডিশনে পারফরম্যান্স টেস্ট করতে পারেন।
- Boundary Testing: ইনপুটের বিভিন্ন সীমা (Boundary) পরীক্ষা করতে পারেন যাতে সিস্টেমটি সীমার মধ্যে সঠিকভাবে কাজ করে।
সারাংশ
Parameterized Tests JUnit এর একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে একাধিক ইনপুটের জন্য একই টেস্ট মেথড ব্যবহার করতে সহায়তা করে। এটি কোড পুনরাবৃত্তি কমায়, টেস্ট কভারেজ বৃদ্ধি করে এবং পারফরম্যান্স উন্নত করতে সহায়ক। JUnit এর @RunWith(Parameterized.class) এবং @Parameters অ্যানোটেশন ব্যবহার করে আপনি সহজেই প্যারামিটারাইজড টেস্ট লিখতে পারবেন এবং আপনার কোডের বিভিন্ন পরিস্থিতি পরীক্ষা করতে পারবেন।
Read more