परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण · पाठ

मॉक, स्टब और फ़ेक

परीक्षण डबल के प्रकार—मॉक, स्टब, फ़ेक और डमी—में अंतर करें और परीक्षण में उनकी भूमिकाएँ समझें।

पाठ 1, कुल 4 में से12 चरण

मॉक, स्टब और फ़ेक, CoddyKit पर परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

परीक्षण डबल क्या होते हैं?

किसी क्लास का परीक्षण करते समय, वह अक्सर अन्य क्लासों पर निर्भर होती है। ये "निर्भरताएँ" परीक्षण को कठिन बना सकती हैं! परीक्षण डबल ऐसे स्थानापन्न ऑब्जेक्ट होते हैं, जो वास्तविक निर्भरताओं के व्यवहार की नकल करते हैं।

वे आपके द्वारा परीक्षण किए जा रहे कोड को अलग रखने में मदद करते हैं, जिससे परीक्षण तेज़, अधिक विश्वसनीय और लिखने में आसान बनते हैं।

हमें इनकी आवश्यकता क्यों है?

कल्पना कीजिए कि आप ऐसी क्लास का परीक्षण कर रहे हैं जो ईमेल भेजती है या डेटाबेस से संपर्क करती है। आप नहीं चाहेंगे कि आपके परीक्षण:

  • वास्तव में ईमेल भेजें (स्पैम!)।
  • वास्तविक डेटाबेस से संपर्क करके धीमे हो जाएँ।
  • ऐसी बाहरी सेवाओं पर निर्भर हों, जो अनुपलब्ध हो सकती हैं।

परीक्षण डबल नियंत्रित और पूर्वानुमेय विकल्प देकर इन समस्याओं का समाधान करते हैं।

डमी ऑब्जेक्ट: केवल स्थानापन्न

डमी ऑब्जेक्ट सबसे सरल प्रकार का परीक्षण डबल है। इसे इधर-उधर भेजा जाता है, लेकिन वास्तव में कभी उपयोग नहीं किया जाता।

इसे ऐसे आवश्यक पैरामीटर की तरह समझें, जिसकी किसी विशेष परीक्षण परिस्थिति में आपके कोड को परवाह नहीं होती। यह केवल एक स्थान भरता है।

  • अक्सर null या खाली इंस्टेंस होता है।
  • इससे किसी व्यवहार की अपेक्षा नहीं की जाती।
  • इसका उपयोग तब होता है जब कोई तर्क आवश्यक हो, लेकिन परीक्षण के लिए अप्रासंगिक हो।

डमी उदाहरण: अप्रासंगिक डेटा

मान लीजिए कि UserService को EmailSender की आवश्यकता है, लेकिन परीक्षण परिस्थिति में हमारी रुचि केवल उपयोगकर्ता बनाने में है, ईमेल भेजने में नहीं।

यहाँ null या एक साधारण new EmailSender() डमी की तरह काम कर सकता है।

interface EmailSender {
  void sendEmail(String to, String subject, String body);
}

class UserService {
  private EmailSender emailSender;

  public UserService(EmailSender emailSender) {
    this.emailSender = emailSender;
  }

  public boolean createUser(String username) {
    // In this specific test, we don't care about emailSender
    // emailSender.sendEmail(username + "@example.com", "Welcome", "Hi!");
    return true; // Simplified for example
  }
}

public class Main {
  public static void main(String[] args) {
    // Here, null acts as a dummy object for createUser test
    EmailSender dummySender = null;
    UserService userService = new UserService(dummySender);
    boolean created = userService.createUser("testuser");
    System.out.println("User created: " + created);
  }
}

स्टब ऑब्जेक्ट: पहले से तय प्रतिक्रियाएँ

स्टब ऑब्जेक्ट परीक्षण के दौरान विधि कॉल के लिए पहले से प्रोग्राम किए गए उत्तर प्रदान करता है। यह कोई वास्तविक तर्क निष्पादित नहीं करता; केवल विशिष्ट मान लौटाता है।

जब आपके परीक्षण को आगे बढ़ने के लिए किसी निर्भरता से किसी विशेष डेटा की आवश्यकता होती है, तब स्टब बहुत उपयोगी होते हैं।

  • निश्चित, पहले से निर्धारित मान लौटाते हैं।
  • स्थिति-आधारित परीक्षण पर ध्यान देते हैं।
  • अंतःक्रियाओं की पुष्टि नहीं करते, केवल डेटा उपलब्ध कराते हैं।

स्टब उदाहरण: निश्चित डेटा

मान लीजिए कि ProductService को उत्पाद खोजने के लिए ProductRepository की आवश्यकता है। कोई स्टब वास्तविक डेटाबेस से संपर्क किए बिना एक विशिष्ट उत्पाद लौटा सकता है।

interface ProductRepository {
  String findProductNameById(int id);
}

class ProductRepositoryStub implements ProductRepository {
  @Override
  public String findProductNameById(int id) {
    if (id == 1) {
      return "Laptop";
    }
    return "Unknown Product";
  }
}

class ProductService {
  private ProductRepository repository;

  public ProductService(ProductRepository repository) {
    this.repository = repository;
  }

  public String getProductDetails(int productId) {
    return "Product: " + repository.findProductNameById(productId);
  }
}

public class Main {
  public static void main(String[] args) {
    ProductRepository stub = new ProductRepositoryStub();
    ProductService service = new ProductService(stub);
    System.out.println(service.getProductDetails(1));
    System.out.println(service.getProductDetails(2));
  }
}

फ़ेक ऑब्जेक्ट: सरल कार्यान्वयन

फ़ेक ऑब्जेक्ट का कार्यशील कार्यान्वयन होता है, लेकिन यह वास्तविक कार्यान्वयन की तुलना में सरल होता है। इसमें आमतौर पर ऐसे शॉर्टकट होते हैं, जो इसे उत्पादन के लिए अनुपयुक्त, लेकिन परीक्षणों के लिए आदर्श बनाते हैं।

मेमोरी में मौजूद डेटाबेस या फ़ाइल सिस्टम का विकल्प फ़ेक के सामान्य उदाहरण हैं।

  • इनमें केवल पहले से तय प्रतिक्रियाएँ नहीं, बल्कि कुछ तर्क भी होते हैं।
  • ये वास्तविक व्यवहार का सरल रूप में अनुकरण करते हैं।
  • एकीकरण-जैसे इकाई परीक्षणों के लिए उपयोगी होते हैं।

फ़ेक उदाहरण: मेमोरी में डेटाबेस

यहाँ एक फ़ेक UserRepository है, जो वास्तविक डेटाबेस के बजाय सरल HashMap में उपयोगकर्ताओं को संग्रहीत करता है। यह उपयोगकर्ताओं को जोड़ने और खोजने का अनुकरण करता है।

import java.util.HashMap;
import java.util.Map;

interface UserRepository {
  void addUser(String name);
  String findUser(String name);
}

class InMemoryUserRepository implements UserRepository {
  private Map<String, String> users = new HashMap<>();

  @Override
  public void addUser(String name) {
    users.put(name, name);
  }

  @Override
  public String findUser(String name) {
    return users.get(name);
  }
}

class UserService {
  private UserRepository repository;

  public UserService(UserRepository repository) {
    this.repository = repository;
  }

  public void registerUser(String username) {
    repository.addUser(username);
  }

  public boolean userExists(String username) {
    return repository.findUser(username) != null;
  }
}

public class Main {
  public static void main(String[] args) {
    UserRepository fakeRepo = new InMemoryUserRepository();
    UserService service = new UserService(fakeRepo);

    service.registerUser("Alice");
    System.out.println("Alice exists: " + service.userExists("Alice"));
    System.out.println("Bob exists: " + service.userExists("Bob"));
  }
}

मॉक ऑब्जेक्ट: व्यवहार की पुष्टि

मॉक ऑब्जेक्ट एक विशेष प्रकार का स्टब है, जो अंतःक्रियाओं को भी रिकॉर्ड करता है। आप मॉक का उपयोग यह जाँचने के लिए करते हैं कि किसी निर्भरता पर कोई विशिष्ट विधि विशिष्ट तर्कों के साथ कितनी बार कॉल की गई।

मॉक व्यवहार-आधारित परीक्षण के केंद्र में होते हैं, जहाँ आपका ध्यान इस बात पर होता है कि आपका ऑब्जेक्ट अपने सहयोगी ऑब्जेक्ट्स के साथ कैसे अंतःक्रिया करता है।

  • विधि कॉल और तर्क रिकॉर्ड करते हैं।
  • अंतःक्रियाओं की पुष्टि करने देते हैं।
  • अक्सर मॉकिंग फ़्रेमवर्क, जैसे Mockito, द्वारा बनाए जाते हैं!

मॉक बनाम स्टब: व्यवहार या स्थिति?

मुख्य अंतर इनके उद्देश्य में होता है:

  • स्टब: स्थिति की पुष्टि पर ध्यान देते हैं। वे परीक्षण चलाने के लिए आवश्यक डेटा देते हैं और परीक्षण, परीक्षणाधीन प्रणाली की स्थिति पर अभिकथन करता है।
  • मॉक: व्यवहार की पुष्टि पर ध्यान देते हैं। वे जाँचते हैं कि परीक्षणाधीन प्रणाली ने अपनी निर्भरताओं के साथ किसी विशेष तरीके से अंतःक्रिया की या नहीं।

आप अक्सर दोनों को मिलाकर उपयोग करते हैं: स्टब डेटा देता है और मॉक किसी कार्रवाई की पुष्टि करता है।

परीक्षण डबल की जाँच

किसी निर्भरता पर कोई विशिष्ट विधि कॉल की गई है या नहीं, इसकी पुष्टि करने के लिए मुख्य रूप से किस प्रकार के परीक्षण डबल का उपयोग किया जाता है?

पुनरावलोकन: परीक्षण डबल परिवार

हमने परीक्षण डबल के विभिन्न प्रकारों और अच्छे परीक्षण लिखने में उनके महत्व को समझा:

  • डमी: एक स्थानापन्न, जिसे भेजा जाता है लेकिन उपयोग नहीं किया जाता।
  • स्टब: विधि कॉल के लिए पहले से तय उत्तर देता है।
  • फ़ेक: एक सरल कार्यशील कार्यान्वयन।
  • मॉक: अंतःक्रियाओं और व्यवहार की पुष्टि करता है।

इनकी समझ से आपको अपने कोड को अलग करके प्रभावी ढंग से परीक्षण करने के लिए सही उपकरण चुनने में मदद मिलती है। आगे हम देखेंगे कि Mockito इन मॉक को बनाने में हमारी कैसे मदद करता है!

शुरुआत निःशुल्क

एआई शिक्षक के साथ परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “मॉक, स्टब और फ़ेक” पाठ निःशुल्क है?

हाँ — परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “मॉक, स्टब और फ़ेक” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“मॉक, स्टब और फ़ेक” में मैं क्या सीखूँगा?

परीक्षण डबल के प्रकार—मॉक, स्टब, फ़ेक और डमी—में अंतर करें और परीक्षण में उनकी भूमिकाएँ समझें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“मॉक, स्टब और फ़ेक” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. मॉक, स्टब और फ़ेक
  2. Mockito से मॉक बनाना
  3. मॉक इंटरैक्शन की पुष्टि
  4. @Mock और @InjectMocks से मॉक इंजेक्ट करना
← परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण पर वापस जाएँ