5.1 @ParameterizedTest एनोटेशन

कभी-कभी आप अलग-अलग मापदंडों के साथ परीक्षण को कई बार कॉल करना चाहते हैं: अलग-अलग मान, अलग-अलग इनपुट पैरामीटर, अलग-अलग उपयोगकर्ता नाम। जुनीट का उद्देश्य आपके जीवन को आसान बनाना है, इसलिए इस मामले के लिए इसमें पैरामीटरयुक्त परीक्षण जैसी चीज है।

पैरामिट्रीकृत परीक्षणों का उपयोग करने के लिए, आपको अपनी एक और निर्भरता जोड़ने की आवश्यकता है 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
}