C++ में परीक्षण: unit, integration, e2e आरंभ से अंत तक — पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: C++ परीक्षण विश्वसनीय कोड का आधार क्यों है

\n

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

\n

इस लेख में, हम परीक्षण के तीन प्रमुख स्तरों पर चर्चा करेंगे: unit (मॉड्यूलर), integration (एकीकरण) और e2e (एंड-टू-एंड)। आप जानेंगे कि वे कैसे भिन्न हैं, किन उपकरणों का उपयोग करना है और C++ में सही तरीके से परीक्षण कैसे लिखना है। यह सामग्री शुरुआती और अनुभवी डेवलपर्स दोनों के लिए उपयोगी होगी जो अपने ज्ञान को व्यवस्थित करना चाहते हैं।

\n\n

1. C++ में Unit-परीक्षण: प्रोग्राम के "बिल्डिंग ब्लॉक्स" का परीक्षण

\n

Unit-परीक्षण (या मॉड्यूलर परीक्षण) कोड की सबसे छोटी इकाई की जाँच करते हैं - आमतौर पर एक अलग फ़ंक्शन या क्लास मेथड। उनका मुख्य उद्देश्य: घटक को अलग करना और यह सुनिश्चित करना कि वह बाहरी निर्भरताओं से अलग होकर सही ढंग से काम करता है।

\n\n

1.1. C++ unit-परीक्षण के लिए उपकरण

\n

C++ बाजार में कई परिपक्व फ्रेमवर्क हैं। यहाँ सबसे लोकप्रिय हैं:

\n
    \n
  • Google Test (GTest) — डी-फैक्टो मानक। शक्तिशाली मैक्रोज़, पैरामीटराइज़्ड परीक्षणों के लिए समर्थन, मॉक ऑब्जेक्ट (Google Mock के माध्यम से)।
  • \n
  • Catch2 — हल्का, आधुनिक, उत्कृष्ट सिंटैक्स के साथ। छोटे प्रोजेक्ट्स के लिए उपयुक्त।
  • \n
  • Boost.Test — Boost लाइब्रेरी का हिस्सा। भारी, लेकिन कार्यात्मक।
  • \n
\n

हम सबसे सामान्य विकल्प के रूप में Google Test का उपयोग करेंगे।

\n\n

1.2. C++ (Google Test) में unit-परीक्षण का उदाहरण

\n

मान लीजिए, हमारे पास फैक्टोरियल की गणना के लिए एक सरल फ़ंक्शन है:

\n
// math_utils.h\n#pragma once\nint factorial(int n);
\n
// math_utils.cpp\n#include "math_utils.h"\nint factorial(int n) {\n    if (n < 0) return -1; // त्रुटि: ऋणात्मक संख्या\n    if (n == 0) return 1;\n    return n * factorial(n - 1);\n}
\n

अब Google Test का उपयोग करके एक unit-परीक्षण लिखते हैं:

\n
// test_math_utils.cpp\n#include <gtest/gtest.h>\n#include "math_utils.h"\n\nTEST(FactorialTest, HandlesZeroInput) {\n    EXPECT_EQ(factorial(0), 1);\n}\n\nTEST(FactorialTest, HandlesPositiveInput) {\n    EXPECT_EQ(factorial(5), 120);\n}\n\nTEST(FactorialTest, HandlesNegativeInput) {\n    EXPECT_EQ(factorial(-1), -1);\n}\n\nint main(int argc, char **argv) {\n    ::testing::InitGoogleTest(&argc, argv);\n    return RUN_ALL_TESTS();\n}
\n

परीक्षण चलाएँ - और हरी बत्ती देखें। यदि फ़ंक्शन में कोई त्रुटि होती (जैसे, factorial(5) 119 लौटाता), तो परीक्षण विफल हो जाता, और हमें तुरंत समस्या के बारे में पता चल जाता।

\n\n

1.3. Unit-परीक्षणों के लिए Best practices

\n
    \n
  • पृथक्करण: बाहरी निर्भरताओं (DB, नेटवर्क, फ़ाइल सिस्टम) को बदलने के लिए मॉक (Mock) का उपयोग करें।
  • \n
  • प्रति परीक्षण एक जाँच: प्रत्येक TEST को एक व्यवहार की जाँच करनी चाहिए।
  • \n
  • स्पष्ट नाम: HandlesZeroInput, Test1 से बेहतर है।
  • \n
  • सीमा मामलों का कवरेज: शून्य, ऋणात्मक संख्याएँ, अधिकतम मान।
  • \n
\n\n

2. एकीकरण परीक्षण (Integration Testing): अंतःक्रिया की जाँच

\n

एकीकरण परीक्षण जाँचते हैं कि सिस्टम के विभिन्न मॉड्यूल एक साथ कैसे काम करते हैं। Unit-परीक्षणों के विपरीत, यहाँ हम घटकों को अलग नहीं करते - हम वास्तविक कनेक्शनों की जाँच करते हैं (जैसे, एक क्लास से फ़ंक्शन कॉल जो दूसरे क्लास का उपयोग करता है)।

\n\n

2.1. एकीकरण परीक्षण कब आवश्यक है?

\n