इस लेख में, मैं MongoDB के लिए C# टेस्टकंटेनर्स के बारे में आपका मार्गदर्शन करूंगा! मुझे स्थानीय डेटाबेस कार्य के लिए टेस्टकंटेनर्स का उपयोग करना अच्छा लगता है, जब मैं किसी डेटाबेस को बनाने और नष्ट करने, या क्लाउड में कुछ प्रबंधित करने के ओवरहेड को प्रबंधित करने के बारे में नहीं सोचना चाहता। MongoDB यहां कोई अपवाद नहीं है क्योंकि MongoDB के लिए हमारे पास जो C# Testcontainers NuGet पैकेज है, उसके साथ काम करना एक सपना है।
इस लेख में, मैं आपको टेस्टकंटेनर्स की बुनियादी बातों से परिचित कराऊंगा। वहां से, मैं प्रदर्शित करूंगा कि C# MongoDB.Driver NuGet पैकेज के माध्यम से आपके नव निर्मित डेटाबेस के साथ इंटरैक्ट करना कितना आसान है - लगभग ऐसा जैसे आपको पता भी नहीं चलेगा कि कोई कंटेनर बना हुआ था! आइए इसमें गोता लगाएँ।
Testcontainers एक अद्भुत NuGet पैकेज है जो .NET एप्लिकेशन बनाते समय आपके परीक्षण और स्थानीय विकास वर्कफ़्लो को काफी बढ़ा सकता है। यह डॉकर कंटेनरों को प्रबंधित करने का एक सरल और प्रभावी तरीका प्रदान करता है, जिससे आप हल्के और अलग-अलग उदाहरणों को स्पिन कर सकते हैं और उन्हें ऐसे फाड़ सकते हैं जैसे कभी कुछ हुआ ही नहीं!
इसका मतलब है कि टेस्टकंटेनर्स के साथ, अब आपको टेस्ट डेटाबेस को स्थापित करने और नष्ट करने या जटिल कॉन्फ़िगरेशन फ़ाइलों से निपटने के बारे में चिंता करने की ज़रूरत नहीं है। यह कंटेनर प्रबंधन के सभी विवरणों को संभालता है, जिससे यह प्रक्रिया तुच्छ लगती है - मैं निश्चित रूप से इसे मैन्युअल रूप से संभालना नहीं चाहूंगा।
टेस्टकंटेनर्स के कुछ प्रमुख लाभों में शामिल हैं:
इस लेख के लिए, हम इस बात पर ध्यान केंद्रित करेंगे कि हम विशेष रूप से MongoDB के लिए C# टेस्टकंटेनर का उपयोग कैसे कर सकते हैं। यहां दी गई अधिकांश सलाह अन्य सेवाओं, विशेष रूप से डेटाबेस पर लागू होगी, लेकिन हम अपनी नजरें MongoDB पर बनाए रखेंगे।
C# में Testcontainers के साथ आरंभ करने के लिए, आपको अपने प्रोजेक्ट में आवश्यक निर्भरताएँ स्थापित और कॉन्फ़िगर करने की आवश्यकता होगी। C# में MongoDB के लिए टेस्टकंटेनर सेट करने के लिए नीचे दिए गए चरणों का पालन करें।
आम तौर पर, पहला कदम आपके C# प्रोजेक्ट में Testcontainers NuGet पैकेज को स्थापित करना होगा। आप NuGet पैकेज मैनेजर कंसोल खोलेंगे, और निम्नलिखित कमांड चलाएंगे:
Install-Package Testcontainers
हालाँकि, हमें इस पैकेज के MongoDB फ्लेवर की आवश्यकता है (लेखन के समय मैं संस्करण 3.8.0 का उपयोग कर रहा हूँ) जिसमें बेस टेस्टकंटेनर्स पैकेज शामिल है। आप इसे पैकेज मैनेजर यूजर इंटरफेस के माध्यम से या इस कमांड के साथ इंस्टॉल कर सकते हैं:
Install-Package Testcontainers.MonogoDB
एक बार जब आप टेस्टकंटेनर स्थापित कर लेते हैं, तो आपको इसे MongoDB के लिए कॉन्फ़िगर करना होगा। इसमें आवश्यक सेटिंग्स के साथ एक MongoDB कंटेनर स्थापित करना शामिल है। यहां एक उदाहरण दिया गया है कि आप C# में MongoDB के लिए Testcontainers को कैसे कॉन्फ़िगर कर सकते हैं:
using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .Build();
उपरोक्त उदाहरण में, हम MongoDbBuilder
का एक नया उदाहरण बनाते हैं, और MongoDB छवि और पोर्ट बाइंडिंग निर्दिष्ट करते हैं। WithImage
विधि MongoDB कंटेनर के लिए छवि सेट करती है, इसलिए "mongo:latest" का उपयोग करने से हमेशा नवीनतम छवि खींची जाएगी।
वैकल्पिक रूप से, हम पोर्ट बाइंडिंग का उपयोग यह कॉन्फ़िगर करने के लिए कर सकते हैं कि हम कौन से पोर्ट का स्पष्ट रूप से उपयोग करना चाहते हैं:
using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .WithPortBinding(1337, 27017) .Build();
उपरोक्त कोड WithPortBinding
विधि का उपयोग करता है जो कंटेनर के पोर्ट 27017 को होस्ट मशीन के पोर्ट 1337 से बांधता है। हम आगामी अनुभागों में देखेंगे कि जब तक आपको पोर्ट को बांधने की कोई विशिष्ट आवश्यकता नहीं है, आप संभावित रूप से इसे छोड़ सकते हैं। हम एक गतिशील कनेक्शन स्ट्रिंग प्राप्त कर सकते हैं, जो बहुत सुविधाजनक है!
MongoDB के लिए Testcontainers को कॉन्फ़िगर करने के बाद, आप आवश्यकतानुसार कंटेनर को प्रारंभ और बंद कर सकते हैं। कंटेनर को शुरू करने और रोकने के लिए कोड उदाहरण यहां दिए गए हैं:
MongoDB कंटेनर प्रारंभ करने के लिए:
await container.StartAsync();
MongoDB कंटेनर को रोकने के लिए:
await _container.StopAsync();
याद रखें MongoDbContainer प्रकार का निपटान किया जा सकता है, इसलिए जब आप तैयार हों तो साफ़ करने के लिए DisposeAsync
कॉल करें।
अब जब हमने देख लिया है कि कंटेनरों को कैसे घुमाना और फाड़ना है, तो हमें उनके साथ क्या करना चाहिए? हमारे पास बहुत सारे विकल्प हैं, और वास्तव में, सीमा आपकी अपनी कल्पना है (और समय, पैसा और अन्य संसाधन...)!
अधिकांश लोग एकीकरण या कार्यात्मक परीक्षण लिखने के लिए C# Testcontainers का लाभ उठाते हैं। उदाहरण के लिए, आप टेस्टकंटेनर्स को xUnit या NUnit के साथ मिला सकते हैं, और ऐसे परीक्षण लिख सकते हैं जो वास्तविक डेटाबेस के साथ इंटरैक्ट करते हैं।
मेरे लिए, मुझे MongoDB के लिए बेंचमार्कडॉटनेट तक वायर C# टेस्टकंटेनर ले जाने की आवश्यकता थी ताकि मैं MongoDB में रिकॉर्ड डालने का बेंचमार्क बना सकूं! एक समान उपयोग का मामला जहां मुझे क्षणिक स्थानीय डेटाबेस की आवश्यकता थी, लेकिन जरूरी नहीं कि परीक्षण ढांचे के लिए।
भले ही, हमें C# से इन MongoDB डेटाबेस कंटेनरों से जुड़ने में सक्षम होने की आवश्यकता है, और ये अगले उपखंड इसे कवर करेंगे।
आइए मान लें कि आपने पिछले अनुभाग पढ़े हैं और आपके पास Testcontainers के लिए सही MongoDB पैकेज स्थापित है। यदि आप इस अनुभाग में आगे बढ़ गए हैं, तो वापस जाएं, इसे पढ़ें, और सही पैकेज प्राप्त करें। अन्यथा, आप अपना सिर खुजलाते रहेंगे कि आपको सही निर्भरताएँ क्यों नहीं मिल पा रही हैं!
आपको MongoDB.Driver NuGet पैकेज भी स्थापित करना होगा। यह वही है जिसका उपयोग हम उस डेटाबेस कंटेनर से कनेक्शन स्थापित करने के लिए करने जा रहे हैं जिसे हमने तैयार किया है। मेरे पास अन्य लेख हैं जिन्हें आप पढ़ सकते हैं यदि आप इस बारे में अधिक स्पष्टीकरण चाहते हैं कि MongoDB.Driver सामान्य रूप से कैसे काम करता है:
जाने के लिए तैयार सही पैकेज के साथ, हम चीजों को एक साथ चिपकाने के लिए पहले देखे गए कोड को कुछ MongoDB ड्राइवर कोड के साथ जोड़ सकते हैं:
using MongoDB.Bson; using MongoDB.Driver; using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .Build(); await container.StartAsync(); string connectionString = container.GetConnectionString(); MongoClient mongoClient = new MongoClient(connectionString); IMongoDatabase database = mongoClient.GetDatabase("test"); IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("test");
उपरोक्त उदाहरण में, हम Testcontainers से नए स्पून-अप MongoDB कंटेनर पर GetConnectionString()
कॉल कर सकते हैं। इसके बारे में अद्भुत बात यह है कि इससे कोई फर्क नहीं पड़ता कि आप इस कोड में और पहले लेख में देखे गए बिल्डर पैटर्न का उपयोग करके MongoDB के लिए अपने टेस्टकंटेनर को कैसे कॉन्फ़िगर करते हैं, GetConnectionString()
आपको वह मिलेगा जो आपको कनेक्ट करने के लिए आवश्यक है।
क्योंकि MongoClient
एक कनेक्शन स्ट्रिंग को एकल तर्क के रूप में लेता है, इसके साथ तुरंत काम शुरू करने के लिए MongoDB डेटाबेस तक पहुंच प्राप्त करना मामूली बात है!
अब जब हमारे पास अपना MongoDB टेस्टकंटेनर सेटअप है और हमारे पास इससे जुड़ा एक MongoClient
है, तो हम इस पर CRUD ऑपरेशन करना शुरू कर सकते हैं। कंटेनर इंस्टेंस द्वारा प्रदान किए गए कनेक्शन विवरण ने इन दो चीजों को संयोजित करना आसान बना दिया, और वास्तव में, हम CRUD के लिए केवल MongoDB.Driver विधि कॉल पर ध्यान केंद्रित कर सकते हैं।
यहां एक सरल सीआरयूडी ऑपरेशन करने का एक उदाहरण दिया गया है:
// using code from earlier examples... // Create await collection.InsertOneAsync(new BsonDocument() { ["Name"] = "Nick Cosentino", }); // Read var filterBuilder = Builders<BsonDocument>.Filter; var filter = filterBuilder.Eq("Name", "Nick Cosentino"); var results = collection.Find(filter); // Update var updateBuilder = Builders<BsonDocument>.Update; var update = updateBuilder.Set("Name", "Dev Leader"); collection.UpdateOne(filter, update); // Delete filter = filterBuilder.Eq("Name", "Dev Leader"); collection.DeleteOne(filter);
पिछले कोड स्निपेट का उपयोग करते हुए, हम पहले से ही अपने MongoDB कंटेनर इंस्टेंस और MongoClient
के साथ चल रहे थे। परिणामस्वरूप, आप उपरोक्त कोड स्निपेट में देख सकते हैं कि हम सीधे अपने IMongoCollection<BsonDocument>
के साथ काम कर सकते हैं जो हमने पिछले सेटअप से प्राप्त किया था।
इससे यह स्पष्ट करने में मदद मिलती है कि एक बार जब आप MongoDB डॉकर कंटेनर को टेस्टकंटेनर्स के माध्यम से चालू कर लेते हैं, तो इससे कनेक्ट होने के बाद आपको चीजों को किसी विशेष तरीके से व्यवहार करने की आवश्यकता नहीं होती है!
निष्कर्ष निकालने के लिए, MongoDB के लिए C# Testcontainers आपके परीक्षण और विकास के लिए एक क्षणिक MongoDB डेटा स्टोर को चालू करने और चलाने का एक अविश्वसनीय रूप से सरल तरीका है। हालाँकि यह लेख विशिष्ट उपयोग के मामलों पर ध्यान केंद्रित नहीं करता है, लेकिन उम्मीद है कि आपको यह बेहतर समझ होगी कि MongoDB के साथ इंटरैक्ट करने के लिए Testcontainers के शीर्ष पर MongoDB ड्राइवर की परत चढ़ाना कितना पारदर्शी लगता है।
यह देखते हुए कि C# Testcontainers सेटअप, टियरडाउन और यहां तक कि कनेक्शन स्ट्रिंग प्रबंधन से सिरदर्द को दूर करता है, यदि आप स्थानीय उपयोग के लिए MongoDB के साथ उठना और चलना चाहते हैं तो यह मेरी ओर से एक आसान अनुशंसा है।
यदि आपको यह उपयोगी लगता है और आप सीखने के अधिक अवसरों की तलाश में हैं, तो मेरे मुफ़्त साप्ताहिक सॉफ़्टवेयर इंजीनियरिंग न्यूज़लेटर की सदस्यता लेने पर विचार करें, और YouTube पर मेरे मुफ़्त वीडियो देखें!
यहाँ भी प्रकाशित किया गया