Docker के साथ C++ एकीकरण परीक्षण: A से Z तक
\n\nएकीकरण परीक्षण किसी भी गंभीर C++ प्रोजेक्ट के विकास का एक महत्वपूर्ण चरण है। यह जाँच करने की अनुमति देता है कि सिस्टम के अलग-अलग मॉड्यूल एक साथ कैसे काम करते हैं, डेटाबेस, नेटवर्क सेवाओं और फ़ाइल सिस्टम के साथ कैसे इंटरैक्ट करते हैं। इस संदर्भ में Docker एक अपरिहार्य उपकरण बन जाता है: यह एक पृथक, पुनरुत्पादक वातावरण प्रदान करता है, जो "यह मेरी मशीन पर काम करता है" की समस्याओं को समाप्त करता है। इस लेख में, हम Docker के साथ C++ एकीकरण परीक्षण सेटअप के पूर्ण चक्र को समझेंगे - बुनियादी अवधारणाओं से लेकर उन्नत अभ्यासों तक।
\n\n1. C++ एकीकरण परीक्षण के लिए Docker क्यों?
\n\nपारंपरिक C++ एकीकरण परीक्षण अक्सर वातावरण संबंधी समस्याओं से ग्रस्त होते हैं: लाइब्रेरी के विभिन्न संस्करण, असंगत कंपाइलर, OS की विशिष्ट सेटिंग्स। Docker इन समस्याओं को हमेशा के लिए हल करता है। मुख्य लाभ:
\n\n- \n
- पुनरुत्पादकता: प्रत्येक परीक्षण होस्ट सिस्टम से स्वतंत्र, एक समान वातावरण में चलता है। \n
- पृथक्करण: कंटेनर एक-दूसरे और होस्ट सिस्टम को प्रभावित नहीं करते हैं। \n
- स्केलेबिलिटी: सैकड़ों परीक्षणों को समानांतर में चलाना आसान है। \n
- CI/CD एकीकरण: कंटेनर Jenkins, GitLab CI, GitHub Actions पाइपलाइनों में पूरी तरह फिट होते हैं। \n
एक सरल उदाहरण पर विचार करें: आपका C++ एप्लिकेशन PostgreSQL का उपयोग करता है। Docker के बिना, आपको प्रत्येक परीक्षण सर्वर पर PostgreSQL स्थापित और कॉन्फ़िगर करना होगा। Docker के साथ, यह कॉन्फ़िगरेशन की एक पंक्ति है।
\n\n2. C++ प्रोजेक्ट के लिए Docker वातावरण सेटअप
\n\nअपने C++ एप्लिकेशन के लिए Dockerfile बनाने से शुरू करते हैं। मान लें कि प्रोजेक्ट यूनिट परीक्षणों के लिए CMake और Google Test का उपयोग करता है, लेकिन हमें वास्तविक डेटाबेस के साथ एकीकरण परीक्षणों की आवश्यकता है।
\n\nबिल्ड और परीक्षण के लिए बेसिक Dockerfile:
\n\n# Dockerfile\nFROM ubuntu:22.04 AS builder\n\nRUN apt-get update && apt-get install -y \\\n build-essential \\\n cmake \\\n git \\\n libpq-dev \\\n libgtest-dev \\\n && rm -rf /var/lib/apt/lists/*\n\nWORKDIR /app\nCOPY . .\n\nRUN cmake -B build -DCMAKE_BUILD_TYPE=Release \\\n && cmake --build build --parallel\n\n# परीक्षणों के लिए स्टेज\nFROM builder AS tester\nCMD ["./build/integration_tests"]\n\nइन्फ्रास्ट्रक्चर चलाने के लिए Docker Compose:
\n\n# docker-compose.yml\nversion: '3.8'\n\nservices:\n db:\n image: postgres:15\n environment:\n POSTGRES_DB: testdb\n POSTGRES_USER: testuser\n POSTGRES_PASSWORD: testpass\n healthcheck:\n test: ["CMD-SHELL", "pg_isready -U testuser -d testdb"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n app:\n build: .\n depends_on:\n db:\n condition: service_healthy\n environment:\n DB_HOST: db\n DB_PORT: 5432\n DB_NAME: testdb\n DB_USER: testuser\n DB_PASSWORD: testpass\n command: ["./build/integration_tests"]\n\n3. C++ में एकीकरण परीक्षण लिखना
\n\nएक एकीकरण परीक्षण का उदाहरण देखें जो libpqxx लाइब्रेरी के माध्यम से PostgreSQL के साथ इंटरैक्शन की जाँच करता है। मान लें कि हमारे पास उपयोगकर्ताओं के साथ काम करने के लिए एक मॉड्यूल है।
\n\nएकीकरण परीक्षण का उदाहरण:
\n\n// integration_tests.cpp\n#include <gtest/gtest.h>\n#include <pqxx/pqxx>\n#include <string>\n#include <vector>\n\nclass DatabaseIntegrationTest : public ::testing::Test {\nprotected:\n void SetUp() override {\n conn = new pqxx::connection(\n "host=" + std::getenv("DB_HOST") +\n " port=" + std::getenv("DB_PORT") +\n " dbname=" + std::getenv("DB_NAME") +\n " user=" + std::getenv("DB_USER") +\n " password=" + std::getenv("DB_PASSWORD")\n );\n \n // टेस्ट टेबल बनाएं\n pqxx::work txn(*conn);\n txn.exec("CREATE TABLE IF NOT EXISTS use