C++ के लिए Catch2 Matchers: पूर्ण गाइड उदाहरण सहित

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

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

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

C++ के लिए Catch2 Matchers: पूर्ण गाइड उदाहरण सहित

1. यह क्या है और इसकी आवश्यकता क्यों है

Catch2 (C++ Automated Test Cases in Headers) लाइब्रेरी C++ के लिए एक आधुनिक यूनिट टेस्टिंग फ्रेमवर्क है, जो एक ही हेडर फाइल के रूप में उपलब्ध है। इसकी सबसे शक्तिशाली विशेषताओं में से एक है Matchers (मैचर्स) सिस्टम - ये डिक्लेरेटिव तरीके से वैल्यू चेक करने के उपकरण हैं, जो टेस्ट को अधिक पढ़ने योग्य, लचीला और जानकारीपूर्ण बनाते हैं।

पारंपरिक REQUIRE(x == 5) जैसे assertions के विपरीत, मैचर्स आपको जटिल चेकिंग शर्तों को प्राकृतिक, लगभग मानव-पठनीय रूप में व्यक्त करने की अनुमति देते हैं। उदाहरण के लिए, वेक्टर के सभी एलिमेंट्स को चेक करने के लिए लूप लिखने के बजाय, आप REQUIRE_THAT(vec, Catch::Matchers::AllMatch(Catch::Matchers::Predicate<int>([](int i) { return i > 0; }))) का उपयोग कर सकते हैं। इससे न केवल कोड छोटा होता है, बल्कि टेस्टर के इरादे भी बिल्कुल स्पष्ट हो जाते हैं।

मैचर्स की आवश्यकता क्यों है? पहला, वे उच्च अभिव्यक्तता प्रदान करते हैं: आप एक ही संक्षिप्त कंस्ट्रक्शन से जांच सकते हैं कि स्ट्रिंग में कोई सबस्ट्रिंग है, वह किसी प्रीफिक्स से शुरू होती है, या कोई संख्या किसी निश्चित रेंज में है। दूसरा, मैचर्स टेस्ट फेल होने पर विस्तृत डायग्नोस्टिक्स देते हैं - सिर्फ "false" कहने के बजाय, आपको एक सार्थक संदेश मिलता है, जैसे: "Expected: starts with 'Hello' Actual: 'World'"। तीसरा, वे कम्पोजेबल हैं: आप लॉजिकल ऑपरेटर्स (And, Or, Not) का उपयोग करके सरल मैचर्स को जटिल एक्सप्रेशन में जोड़ सकते हैं।

2. इंस्टॉलेशन

Catch2 एक हेडर-ओनली लाइब्रेरी है। इसका उपयोग करने के लिए किसी जटिल इंस्टॉलेशन या बिल्ड सेटअप की आवश्यकता नहीं है। दो मुख्य तरीके हैं:

तरीका 1: एक फाइल डाउनलोड करें (शुरुआत के लिए अनुशंसित)

GitHub पर Catch2 के आधिकारिक रिलीज पेज से catch_amalgamated.hpp या catch.hpp फाइल डाउनलोड करें। इसे अपने प्रोजेक्ट फोल्डर में रखें और कोड में शामिल करें:

#include "catch_amalgamated.hpp"

तरीका 2: डिपेंडेंसी मैनेजमेंट सिस्टम का उपयोग करें (vcpkg, Conan, CMake FetchContent)

प्रोफेशनल प्रोजेक्ट्स के लिए पैकेज मैनेजर का उपयोग करने की सलाह दी जाती है। vcpkg के लिए उदाहरण:

# vcpkg के माध्यम से Catch2 इंस्टॉल करें
vcpkg install catch2

फिर अपने CMakeLists.txt में:

find_package(Catch2 REQUIRED)
target_link_libraries(my_test PRIVATE Catch2::Catch2WithMain)

महत्वपूर्ण: Catch2 v3.x और उससे ऊपर के वर्जन में, मैचर्स Catch::Matchers नेमस्पेस में होते हैं। v2.x में भी ये Catch::Matchers में थे (लेकिन हेडर फाइलों की संरचना बदल गई है)। v3.x के लिए #include <catch2/catch_test_macros.hpp> और #include <catch2/matchers/catch_matchers_all.hpp> का उपयोग करें।

3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण

आइए स्ट्रिंग चेक करने के लिए मैचर का उपयोग करते हुए एक सरल टेस्ट लिखें:

// test.cpp
#define CATCH_CONFIG_MAIN  // यह लाइन केवल एक .cpp फाइल में होनी चाहिए
#include <catch2/catch_test_macros.hpp>
#include <catch2/matchers/catch_matchers_all.hpp>
#include <string>

TEST_CASE("String matchers work", "[string]") {
    std::string hello = "Hello, World!";

    // जांचें कि स्ट्रिंग में सबस्ट्रिंग है
    CHECK_THAT(hello, Catch::Matchers::ContainsSubstring("World"));

    // जांचें कि स्ट्रिंग "Hello" से शुरू होती है
    CHECK_THAT(hello, Catch::Matchers::StartsWith("Hello"));

    // जांचें कि स्ट्रिंग "!" पर समाप्त होती है
    CHECK_THAT(hello, Catch::Matchers:

अनुशंसाएँ