5.1 @ParameterizedTest টীকা

কখনও কখনও আপনি বিভিন্ন পরামিতি সহ একাধিকবার পরীক্ষাটি কল করতে চান: বিভিন্ন মান, বিভিন্ন ইনপুট পরামিতি, বিভিন্ন ব্যবহারকারীর নাম৷ JUnit আপনার জীবনকে সহজ করে তোলার লক্ষ্য রাখে, তাই এই ক্ষেত্রে এটির প্যারামিটারাইজড পরীক্ষার মতো জিনিস রয়েছে।

প্যারামিটারাইজড পরীক্ষাগুলি ব্যবহার করতে, আপনাকে আপনার আরও একটি নির্ভরতা যুক্ত করতে হবে pom.xml:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>

তারপরে আমরা একটি উদাহরণ বিবেচনা করতে পারি:

@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethod(int argument) {
    //test code
}

@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
    //test code
}

প্রতিটি পরীক্ষা পদ্ধতি 3 বার বলা হবে, এবং প্রতিবার এটি কল করা হবে, অন্য প্যারামিটার এটি পাস করা হবে। মান অন্য টীকা ব্যবহার করে সেট করা হয় - @ValueSource । তবে এটি সম্পর্কে আরও কিছু বলা দরকার।

5.2 @ValueSource টীকা

@ValueSource টীকাটি আদিম এবং আক্ষরিকগুলির সাথে কাজ করার জন্য দুর্দান্ত। শুধু কমা দ্বারা পৃথক করা প্যারামিটার মানগুলি তালিকাভুক্ত করুন এবং প্রতিটি মানের জন্য একবার পরীক্ষা করা হবে।

@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
    //test code
}

তবে একটি বিয়োগও রয়েছে - এই টীকাটি নাল সমর্থন করে না, তাই আপনাকে এটির জন্য একটি বিশেষ ক্রাচ ব্যবহার করতে হবে - @NullSource । এটি এই মত দেখায়:

@ParameterizedTest
@NullSource
void testMethodNullSource(Integer argument) {
    assertTrue(argument == null);
}

5.3 @EnumSource টীকা

এখানে একটি বিশেষ টীকা রয়েছে @EnumSource , যা একটি নির্দিষ্ট Enum-এর সমস্ত মানকে পদ্ধতিতে পাস করে। এর অ্যাপ্লিকেশনটি এইরকম দেখাচ্ছে:

enum Direction {
    EAST, WEST, NORTH, SOUTH
}

@ParameterizedTest
@EnumSource(Direction.class)
void testWithEnumSource(Direction d) {
    assertNotNull(d);
}

5.4 @MethodSource টীকা

কিন্তু কিভাবে পরামিতি হিসাবে বস্তু পাস? বিশেষ করে যদি তাদের একটি জটিল নির্মাণ অ্যালগরিদম থাকে। এটি করার জন্য, আপনি কেবল একটি বিশেষ সহায়ক পদ্ধতি নির্দিষ্ট করতে পারেন যা এই জাতীয় মানগুলির একটি তালিকা (স্ট্রিম) প্রদান করবে।

উদাহরণ:

@ParameterizedTest
@MethodSource("argsProviderFactory")
void testWithMethodSource(String argument) {
    assertNotNull(argument);
}

static Stream<String> argsProviderFactory() {
    return Stream.of("one", "two",  "three");
}

একাধিক আর্গুমেন্ট সহ প্যারামিটারাইজড টেস্ট

অবশ্যই, আপনি ইতিমধ্যেই ভাবছেন যে আপনি যদি পদ্ধতিতে বেশ কয়েকটি পরামিতি পাস করতে চান তবে কী করবেন। এটির জন্য একটি খুব দুর্দান্ত @CSVSource টীকা আছে । এটি আপনাকে কমা দ্বারা বিভক্ত পদ্ধতির পরামিতিগুলির মানগুলি তালিকাভুক্ত করতে দেয়।

উদাহরণ:

@ParameterizedTest
@CsvSource({
    "alex, 30, Programmer, Working",
    "brian, 35, Tester, Working",
	"charles, 40, manager, kicks"
})
void testWithCsvSource(String name, int age, String occupation, String status) {
	//method code
}