JUnit হল একটি জনপ্রিয় টেস্ট ফ্রেমওয়ার্ক যা Java কোডের ইউনিট টেস্ট লেখার জন্য ব্যবহৃত হয়। এটি কোডের নির্ভরযোগ্যতা এবং সঠিকতা নিশ্চিত করতে সহায়তা করে। JUnit 5 এর সাথে, আপনি টেস্ট কেসে complex test data যোগ করতে @MethodSource এবং @CsvSource অ্যানোটেশন ব্যবহার করতে পারেন। এই অ্যানোটেশনগুলির মাধ্যমে আপনি টেস্টের জন্য বিভিন্ন ধরনের ডাটা প্রোভাইড করতে পারেন, যা টেস্টিং প্রক্রিয়াকে আরও শক্তিশালী এবং নমনীয় করে তোলে।
এই টিউটোরিয়ালে, আমরা @MethodSource এবং @CsvSource অ্যানোটেশন ব্যবহার করে কিভাবে complex test data যোগ করা যায়, তা দেখব।
১. @MethodSource অ্যানোটেশন
@MethodSource অ্যানোটেশন ব্যবহার করে আপনি টেস্টের জন্য ডাটা প্রোভাইড করতে পারেন একটি মেথড থেকে, যা টেস্টের জন্য প্রোপার ডাটা রিটার্ন করবে। এটি ডাইনামিক ডাটা সোর্স তৈরির জন্য উপকারী, যেখানে আপনি বিভিন্ন টেস্ট কেসের জন্য ভিন্ন ভিন্ন ডাটা ব্যবহার করতে পারেন।
উদাহরণ: @MethodSource
ধরা যাক, আমাদের একটি Calculator ক্লাস আছে এবং আমরা এটিতে কিছু মেথড টেস্ট করতে চাই।
Calculator.java:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
CalculatorTest.java:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.MethodSource;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.stream.Stream;
public class CalculatorTest {
// @MethodSource for providing test data
@Test
@MethodSource("provideDataForAddition")
public void testAddition(int a, int b, int expected) {
Calculator calculator = new Calculator();
int result = calculator.add(a, b);
assertEquals(expected, result);
}
// Method providing test data
private static Stream<org.junit.jupiter.params.provider.Arguments> provideDataForAddition() {
return Stream.of(
org.junit.jupiter.params.provider.Arguments.arguments(1, 2, 3),
org.junit.jupiter.params.provider.Arguments.arguments(5, 10, 15),
org.junit.jupiter.params.provider.Arguments.arguments(0, 0, 0)
);
}
}
এখানে, @MethodSource অ্যানোটেশন testAddition মেথডে ব্যবহার করা হয়েছে এবং provideDataForAddition() মেথডটি ডাটা প্রোভাইড করছে। এইভাবে, একাধিক ডাটা সেট থেকে টেস্ট চালানো সম্ভব হচ্ছে।
২. @CsvSource অ্যানোটেশন
@CsvSource অ্যানোটেশন ব্যবহার করে আপনি টেস্টের জন্য CSV ফরম্যাটে ডাটা প্রোভাইড করতে পারেন। এটি বিশেষভাবে দরকারী যখন আপনি একাধিক ডাটা ভ্যালু থেকে টেস্ট করতে চান।
উদাহরণ: @CsvSource
ধরা যাক, আমাদের একটি StringUtility ক্লাস আছে যা দুটি স্ট্রিংয়ের মধ্যে যোগফল বের করার কাজ করে।
StringUtility.java:
public class StringUtility {
public String concatenate(String str1, String str2) {
return str1 + str2;
}
}
StringUtilityTest.java:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class StringUtilityTest {
// @CsvSource for providing complex test data
@ParameterizedTest
@CsvSource({
"'Hello', 'World', 'HelloWorld'",
"'Java', 'UnitTest', 'JavaUnitTest'",
"'JUnit', '5', 'JUnit5'"
})
public void testConcatenate(String str1, String str2, String expected) {
StringUtility utility = new StringUtility();
String result = utility.concatenate(str1, str2);
assertEquals(expected, result);
}
}
এখানে, @CsvSource অ্যানোটেশন ব্যবহার করে আপনি একাধিক String ইনপুট এবং তাদের প্রত্যাশিত আউটপুট দিয়ে টেস্ট কেসটি চালাচ্ছেন। CSV ফরম্যাটে ডাটা প্রদান করা হয়েছে যেখানে কমা দিয়ে ইনপুট এবং আউটপুট পৃথক করা হয়েছে।
৩. @CsvSource এবং @MethodSource এর মধ্যে পার্থক্য
| Feature | @MethodSource | @CsvSource |
|---|---|---|
| Data Source Type | একটি মেথড থেকে ডাটা প্রোভাইড করা হয় | CSV স্ট্রিং থেকে ডাটা প্রোভাইড করা হয় |
| Usage | সাধারণত বড় বা কাস্টম ডাটা সোর্সের জন্য ব্যবহার করা হয় | ছোট ও সাধারণ ডাটা সোর্সের জন্য সহজতর ব্যবহৃত হয় |
| Data Format | মেথড আর্গুমেন্ট এবং আর্গুমেন্টের মাধ্যমে ডাটা প্রদান | CSV স্ট্রিং (কমা দ্বারা পৃথক) |
| Complexity | কাস্টম লজিক ব্যবহার করা যায় | সাধারণ ডাটা ম্যানিপুলেশন |
৪. Test Data with Multiple Arguments
ধরা যাক, আমাদের দুটি ভিন্ন ইনপুট প্যারামিটার দিয়ে টেস্ট করতে হবে এবং প্রত্যাশিত আউটপুট সুনির্দিষ্ট করতে হবে। এই ক্ষেত্রে @CsvSource অ্যানোটেশন একাধিক ইনপুট প্যারামিটার এবং তাদের প্রত্যাশিত ফলাফল একটি সহজ উপায়ে প্রোভাইড করতে সহায়তা করে।
উদাহরণ: Multiple Arguments with @CsvSource
@ParameterizedTest
@CsvSource({
"2, 3, 5",
"5, 10, 15",
"0, 0, 0"
})
public void testAddition(int a, int b, int expected) {
Calculator calculator = new Calculator();
assertEquals(expected, calculator.add(a, b));
}
এখানে, @CsvSource অ্যানোটেশন তিনটি ভিন্ন ইনপুট (অ্যাডিশন টেস্ট) থেকে টেস্ট চালাবে।
সারাংশ
JUnit টেস্টিং ফ্রেমওয়ার্কে @MethodSource এবং @CsvSource অ্যানোটেশন ব্যবহার করে complex test data সহজে যোগ করা যায়। @MethodSource টেস্ট ডেটা একটি মেথড থেকে এনে টেস্ট করতে সহায়তা করে, যেখানে @CsvSource সরাসরি CSV ফরম্যাটে ডাটা প্রদান করে। উভয় অ্যানোটেশনই JUnit 5 এর প্যারামিটারাইজড টেস্টিংয়ের জন্য অত্যন্ত কার্যকরী এবং নমনীয়ভাবে একাধিক ডাটা প্যারামিটার দিয়ে টেস্ট সম্পাদন করতে সহায়তা করে।
Read more