@CsvSource और @MethodSource से पैरामीटरयुक्त परीक्षण
@ParameterizedTest, @CsvSource और @MethodSource से कई इनपुट सेटों पर समान परीक्षण चलाइए
@CsvSource और @MethodSource से पैरामीटरयुक्त परीक्षण, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
पैरामीटरयुक्त परीक्षण क्यों
एक ही परीक्षण तर्क को कई इनपुट सेट के साथ चलाने पर परीक्षण विधियों की प्रतिलिपि बनाए बिना किनारे के मामलों का पता चलता है। JUnit 5, @ParameterizedTest के माध्यम से पैरामीटरयुक्त परीक्षणों का मूल रूप से समर्थन करता है।
@ValueSource: सरल एकल-मान परीक्षण
@ValueSource किसी दिए गए प्रकार का एक पैरामीटर उपलब्ध कराता है। परीक्षण प्रत्येक मान के लिए एक बार चलता है।
@ParameterizedTest
@ValueSource(strings = {"", " ", "\t"})
void blank_strings_are_rejected(String input) {
assertThrows(IllegalArgumentException.class, () -> validator.validate(input));
}@CsvSource: इनलाइन में कई पैरामीटर
@CsvSource अल्पविराम से अलग किए गए मानों की पंक्तियाँ उपलब्ध कराता है। प्रत्येक पंक्ति एक परीक्षण आह्वान होती है। स्ट्रिंग मानों में अल्पविराम से बचने के लिए एकल उद्धरणों का उपयोग करें।
@ParameterizedTest
@CsvSource({
"Alice, 30, true",
"Bob, 17, false",
"Carol, 0, false"
})
void test_adult_check(String name, int age, boolean expectedAdult) {
User user = new User(name, age);
assertEquals(expectedAdult, user.isAdult());
}@CsvSource और delimiterString
बहु-अक्षरीय डिलिमिटर के लिए या तब delimiterString का उपयोग करें, जब आपके डेटा में अल्पविराम हों। किसी संकेतक स्ट्रिंग को null में बदलने के लिए nullValues का उपयोग करें।
@ParameterizedTest
@CsvSource(value = {
"Alice | 30 | ADMIN",
"Bob | 25 | USER"
}, delimiterString = "|")
void test_roles(String name, int age, String role) { ... }@CsvFileSource: बाहरी डेटा फ़ाइलें
क्लासपाथ में मौजूद CSV फ़ाइल से परीक्षण डेटा लोड करें। यह उन बड़े डेटा सेट के लिए उपयोगी है, जो परीक्षण कोड को अव्यवस्थित कर देते।
@ParameterizedTest
@CsvFileSource(resources = "/test-data/users.csv", numLinesToSkip = 1)
void test_from_file(String name, int age, boolean expected) {
assertEquals(expected, service.isEligible(name, age));
}@MethodSource: जटिल पैरामीटर
@MethodSource एक स्थिर फ़ैक्टरी विधि को कॉल करता है, जो Stream<Arguments> लौटाती है। प्रत्येक Arguments.of() एक परीक्षण आह्वान होता है। इसका उपयोग जटिल ऑब्जेक्ट के लिए करें।
@ParameterizedTest
@MethodSource("provideOrders")
void test_total_calculation(Order order, BigDecimal expected) {
assertEquals(expected, orderService.calculateTotal(order));
}
static Stream<Arguments> provideOrders() {
return Stream.of(
Arguments.of(new Order(List.of(item(10), item(20))), BigDecimal.valueOf(30)),
Arguments.of(new Order(List.of()), BigDecimal.ZERO)
);
}@EnumSource: सभी enum मानों का परीक्षण
@EnumSource प्रत्येक enum स्थिरांक के लिए परीक्षण को एक बार चलाता है। विशिष्ट मानों को शामिल या बाहर करने के लिए mode और names का उपयोग करें।
@ParameterizedTest
@EnumSource(value = UserStatus.class, mode = EnumSource.Mode.EXCLUDE, names = "DELETED")
void test_active_statuses(UserStatus status) {
assertTrue(notificationService.shouldNotify(status));
}@NullAndEmptySource
null और खाली स्ट्रिंग इनपुट का परीक्षण करने का संक्षिप्त तरीका। इसे @ValueSource के साथ @NullSource + @EmptySource या संयुक्त @NullAndEmptySource का उपयोग करके मिलाएँ।
@ParameterizedTest
@NullAndEmptySource
void null_and_empty_are_invalid(String input) {
assertFalse(validator.isValid(input));
}कस्टम प्रदर्शन नाम
परीक्षण के प्रदर्शन नाम का प्रारूप तय करने के लिए @ParameterizedTest में name का उपयोग करें। प्लेसहोल्डर: {index}, {0}, {1}, {arguments}।
@ParameterizedTest(name = "age={1} should be adult={2}")
@CsvSource({"Alice, 30, true", "Bob, 17, false"})
void test_adult(String name, int age, boolean expected) { ... }@ArgumentsSource के साथ स्रोतों को मिलाना
पूरी तरह कस्टम आर्ग्युमेंट जनरेशन के लिए ArgumentsProvider लागू करें — डेटाबेस, फ़ाइलों या API से डायनेमिक डेटा प्राप्त करने के लिए।
public class UserArgumentsProvider implements ArgumentsProvider {
public Stream<? extends Arguments> provideArguments(ExtensionContext ctx) {
return Stream.of(
Arguments.of(new User("Alice", 30)),
Arguments.of(new User("Bob", 17))
);
}
}
@ParameterizedTest
@ArgumentsSource(UserArgumentsProvider.class)
void test_user(User user) { ... }सीमा मानों के लिए पैरामीटरयुक्त परीक्षण
सीमा स्थितियों का व्यवस्थित रूप से परीक्षण करें: min-1, min, max, max+1। पैरामीटरयुक्त परीक्षण सीमा-कवरेज को पढ़ने और बनाए रखने योग्य बनाते हैं।
@ParameterizedTest
@CsvSource({"0, false", "1, true", "100, true", "101, false"})
void test_range_boundaries(int value, boolean expected) {
assertEquals(expected, validator.isInRange(value, 1, 100));
}त्वरित जाँच
कौन-सा @MethodSource रिटर्न प्रकार प्रत्येक परीक्षण आह्वान के आर्ग्युमेंट उपलब्ध कराता है?
पुनरावलोकन
इनलाइन सारणीबद्ध डेटा के लिए @CsvSource, जटिल ऑब्जेक्ट के लिए @MethodSource, सभी enum मानों के लिए @EnumSource और null/खाली किनारे के मामलों के लिए @NullAndEmptySource का उपयोग करें। name= के साथ कस्टम नाम परीक्षण की पठनीयता बढ़ाते हैं।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “@CsvSource और @MethodSource से पैरामीटरयुक्त परीक्षण” पाठ निःशुल्क है?
हाँ—“@CsvSource और @MethodSource से पैरामीटरयुक्त परीक्षण” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“@CsvSource और @MethodSource से पैरामीटरयुक्त परीक्षण” में मैं क्या सीखूँगा?
@ParameterizedTest, @CsvSource और @MethodSource से कई इनपुट सेटों पर समान परीक्षण चलाइए आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“@CsvSource और @MethodSource से पैरामीटरयुक्त परीक्षण” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- @CsvSource और @MethodSource से पैरामीटरयुक्त परीक्षण
- Mockito उन्नत: आर्ग्युमेंट कैप्चरर और स्पाई
- Spring Boot परीक्षण स्लाइस: @WebMvcTest और @DataJpaTest
- Testcontainers: वास्तविक डेटाबेस एकीकरण परीक्षण