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

परीक्षण-योग्यता के लिए रिफ़ैक्टरिंग

जानें कि TDD स्वाभाविक रूप से बेहतर कोड डिज़ाइन की ओर कैसे ले जाता है और अपने परीक्षणों पर भरोसा रखते हुए सुरक्षित रूप से रिफ़ैक्टर कैसे करें।

पाठ 3, कुल 4 में से11 चरण

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

TDD में पुनर्गठन: परिचय

परीक्षण-प्रेरित विकास (TDD) में "पुनर्गठन" चरण महत्वपूर्ण है। असफल परीक्षण लिखने (लाल) और उसे सफल बनाने (हरा) के बाद हम पुनर्गठन चरण में प्रवेश करते हैं।

पुनर्गठन का अर्थ है बाहरी व्यवहार बदले बिना कोड की आंतरिक संरचना में सुधार करना। इसका उद्देश्य आपके कोड को अधिक साफ़, पठनीय और रखरखाव में आसान बनाना है।

परीक्षणों का सुरक्षा-जाल

TDD में पुनर्गठन सुरक्षित क्यों है? क्योंकि आपके पास सफल परीक्षणों का व्यापक संग्रह होता है!

  • विश्वास: आपके परीक्षण सुरक्षा-जाल की तरह काम करते हैं और सुनिश्चित करते हैं कि संरचना में किए गए बदलाव नए बग न लाएँ।
  • प्रतिक्रिया: यदि पुनर्गठन के बाद कोई परीक्षण असफल होता है, तो आपको तुरंत पता चल जाता है कि कुछ टूट गया है और आप उसे पहले की स्थिति में ला या ठीक कर सकते हैं।

यह विश्वास विकासकर्ताओं को कोड की गुणवत्ता में लगातार सुधार करने देता है।

परीक्षण योग्य कोड क्या है?

पुनर्गठन स्वाभाविक रूप से अधिक परीक्षण योग्य कोड की ओर ले जाता है। लेकिन कोड को परीक्षण योग्य क्या बनाता है?

  • छोटा और केंद्रित: कोड की इकाइयाँ (methods, classes) एक काम अच्छी तरह करती हैं।
  • ढीला युग्मन: घटकों की एक-दूसरे पर निर्भरताएँ न्यूनतम होती हैं।
  • स्पष्ट ज़िम्मेदारियाँ: प्रत्येक class या method का एक स्पष्ट, एकल उद्देश्य होता है।

इन सिद्धांतों से अलग-अलग भागों को अलग करके उनका परीक्षण करना आसान हो जाता है।

कोड की गंध: छिपी हुई निर्भरताएँ

ऐसी class पर विचार करें जो डेटा संसाधित करने के साथ-साथ संदेशों को सीधे कंसोल पर दर्ज भी करती है। इससे System.out पर एक "छिपी हुई निर्भरता" आ जाती है और संसाधन तर्क का अलग से परीक्षण करना कठिन हो जाता है।

हम यह परीक्षण करना चाहते हैं कि processData काम करता है, न कि यह कि System.out.println काम करता है!

उदाहरण: कम परीक्षण योग्य कोड

यह एक सरल ReportGenerator है। ध्यान दें कि यह सीधे System.out.println का उपयोग करता है। इससे कंसोल आउटपुट देखे बिना रिपोर्ट बनाने के तर्क का परीक्षण करना कठिन हो जाता है।

public class ReportGenerator {
  public String generateReport(String data) {
    // Simulate some complex processing
    String processedData = "Processed: " + data.toUpperCase();
    System.out.println("Log: Report generated for " + data);
    return processedData;
  }

  public static void main(String[] args) {
    ReportGenerator generator = new ReportGenerator();
    System.out.println(generator.generateReport("sales"));
  }
}

पुनर्गठन: इंटरफ़ेस निकालें

परीक्षण-योग्यता सुधारने के लिए हम अपने संदेश-दर्ज करने के तंत्र के लिए एक interface प्रस्तुत कर सकते हैं। इससे ReportGenerator किसी विशेष संदेश-दर्ज कार्यान्वयन से अलग हो जाता है।

एक interface अनुबंध परिभाषित करता है: किसी class को कौन-सी methods लागू करनी होंगी।

public interface Logger {
  void log(String message);
}

public class ConsoleLogger implements Logger {
  @Override
  public void log(String message) {
    System.out.println("Console: " + message);
  }
}

पुनर्गठन: निर्भरता इंजेक्शन

अब हम Logger निर्भरता को ReportGenerator के constructor में डाल सकते हैं। इसे निर्भरता इंजेक्शन कहा जाता है।

ReportGenerator अब अपना logger स्वयं नहीं बनाता; वह उसे प्राप्त करता है। इससे परीक्षण के दौरान एक "नकली" logger देना बहुत आसान हो जाता है।

public interface Logger {
  void log(String message);
}

public class ConsoleLogger implements Logger {
  @Override
  public void log(String message) {
    System.out.println("Console: " + message);
  }
}

public class ReportGenerator {
  private final Logger logger;

  public ReportGenerator(Logger logger) {
    this.logger = logger;
  }

  public String generateReport(String data) {
    String processedData = "Processed: " + data.toUpperCase();
    logger.log("Report generated for " + data);
    return processedData;
  }

  public static void main(String[] args) {
    Logger consoleLogger = new ConsoleLogger();
    ReportGenerator generator = new ReportGenerator(consoleLogger);
    System.out.println(generator.generateReport("sales"));
  }
}

परीक्षण-योग्यता का लाभ

निर्भरता इंजेक्शन से परीक्षण बहुत सरल हो जाता है:

  • उत्पादन के लिए आप एक वास्तविक ConsoleLogger दे सकते हैं।
  • इकाई परीक्षणों के लिए आप एक परीक्षण प्रतिरूप (जैसे नकली वस्तु) दे सकते हैं, जो वास्तविक कंसोल आउटपुट के बिना कॉल दर्ज करता है। इससे आप परीक्षण आउटपुट में हस्तक्षेप किए बिना सत्यापित कर सकते हैं कि logger.log() अपेक्षा के अनुसार कॉल किया गया था।

इससे आपके ReportGenerator का तर्क वास्तव में अलग और परीक्षण योग्य बन जाता है।

निरंतर सुधार

पुनर्गठन एक बार होने वाली घटना नहीं है; यह TDD चक्र की एक निरंतर आदत है। प्रत्येक सफल परीक्षण के बाद कोड में सुधार के तरीकों को देखने के लिए कुछ समय निकालें।

  • बॉय स्काउट नियम: शिविर को हमेशा अपनी खोजी हुई स्थिति से अधिक साफ़ छोड़ें। इसे कोड पर लागू करें: जिस मॉड्यूल पर आपने काम शुरू किया था, उसे हमेशा पहले से अधिक साफ़ स्थिति में छोड़ें।

इससे ऐसा कोड-आधार बनता है जो स्वाभाविक रूप से बेहतर डिज़ाइन और उच्च गुणवत्ता की ओर विकसित होता है।

परीक्षण-योग्यता के लिए पुनर्गठन के लाभों की जाँच

परीक्षण-योग्यता के लिए पुनर्गठन के लाभों पर विचार करें।

पुनरावलोकन: TDD के लिए पुनर्गठन

इस पाठ में हमने TDD के महत्वपूर्ण "पुनर्गठन" चरण का अध्ययन किया। हमने सीखा कि सफल परीक्षणों के सहारे पुनर्गठन हमें व्यवहार बदले बिना कोड डिज़ाइन में सुरक्षित रूप से सुधार करने देता है।

  • हमने देखा कि ढीले युग्मन और निर्भरता इंजेक्शन को बढ़ावा देकर पुनर्गठन अधिक परीक्षण योग्य कोड की ओर ले जाता है।
  • इससे परीक्षण के लिए इकाइयों को अलग करना और परीक्षण प्रतिरूपों का सरल उपयोग संभव होता है।
  • पुनर्गठन एक निरंतर प्रक्रिया है, जो समय के साथ कोड की गुणवत्ता और रखरखाव-क्षमता सुधारती है।

मजबूत और साफ़ सॉफ़्टवेयर बनाने के लिए पुनर्गठन करते रहें!

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

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

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

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

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

क्या “परीक्षण-योग्यता के लिए रिफ़ैक्टरिंग” पाठ निःशुल्क है?

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

“परीक्षण-योग्यता के लिए रिफ़ैक्टरिंग” में मैं क्या सीखूँगा?

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

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

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

“परीक्षण-योग्यता के लिए रिफ़ैक्टरिंग” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. TDD चक्र का परिचय
  2. पहले परीक्षण लिखना
  3. परीक्षण-योग्यता के लिए रिफ़ैक्टरिंग
  4. TDD के तीन नियम
← परीक्षण में निपुणता: JUnit, Mockito और एकीकरण परीक्षण पर वापस जाएँ