Docker के साथ C# एकीकरण परीक्षण: A से Z तक पूर्ण गाइड

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

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

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

Docker के साथ C# एकीकरण परीक्षण: A से Z तक

\n\n

एकीकरण परीक्षण किसी भी गंभीर C# एप्लिकेशन के विकास में एक महत्वपूर्ण चरण है। यह जाँचता है कि सिस्टम के विभिन्न घटक (डेटाबेस, बाहरी API, फ़ाइल सिस्टम) एक साथ कैसे काम करते हैं। हालाँकि, परीक्षण वातावरण सेट करना अक्सर सिरदर्द बन जाता है: वास्तविक सर्वर चालू करने, परीक्षणों के बाद डेटा साफ़ करने और वातावरण की अस्थिरता से जूझने की आवश्यकता होती है। Docker हल्के, पृथक और पुनरुत्पादनीय कंटेनर प्रदान करके इन समस्याओं का समाधान करता है। इस लेख में, हम शून्य से एक कार्यशील पाइपलाइन तक Docker के साथ C# एकीकरण परीक्षण सेट करने का तरीका समझेंगे।

\n\n

C# एकीकरण परीक्षणों के लिए Docker आदर्श क्यों है?

\n\n

पारंपरिक दृष्टिकोण स्थानीय SQL Server डेटाबेस या बाहरी सेवाओं के एमुलेटर का उपयोग करना है। इससे समस्याएँ होती हैं:

\n
    \n
  • डेटा संदूषण: परीक्षण DB में कचरा छोड़ देते हैं, जो अन्य परीक्षणों को प्रभावित करता है।
  • \n
  • वातावरण असंगति: डेवलपर की मशीन पर DBMS का एक संस्करण, CI सर्वर पर दूसरा।
  • \n
  • समानांतर निष्पादन में कठिनाई: परीक्षण पोर्ट और संसाधनों के लिए संघर्ष करते हैं।
  • \n
\n\n

Docker इसे सरलता से हल करता है: प्रत्येक परीक्षण (या परीक्षणों का समूह) DB, Redis या अन्य सेवा के आवश्यक संस्करण के साथ अपना पृथक कंटेनर प्राप्त करता है। कंटेनर हल्के होते हैं, सेकंडों में शुरू होते हैं, और परीक्षण पूरा होने के बाद गारंटीकृत रूप से नष्ट हो जाते हैं। .NET डेवलपर्स के लिए, यह Testcontainers for .NET लाइब्रेरी के कारण विशेष रूप से प्रासंगिक है, जो परीक्षण कोड से सीधे कंटेनर प्रबंधन को स्वचालित करता है।

\n\n

प्रोजेक्ट सेटअप: C# परीक्षणों में Docker जोड़ना

\n\n

शुरू करने के लिए, एकीकरण परीक्षणों के साथ एक प्रोजेक्ट बनाते हैं। मान लें कि हमारे पास .NET 8 पर एक वेब API है जो PostgreSQL के साथ काम करता है। हमें उपयोगकर्ता निर्माण एंडपॉइंट का परीक्षण करना है।

\n\n

चरण 1: NuGet पैकेज स्थापित करना

\n

परीक्षण प्रोजेक्ट में निम्नलिखित पैकेज जोड़ें:

\n
dotnet add package Testcontainers.PostgreSql\ndotnet add package Microsoft.AspNetCore.Mvc.Testing\ndotnet add package FluentAssertions
\n\n

Testcontainers.PostgreSql Docker SDK के ऊपर एक रैपर है जो PostgreSQL कंटेनरों का प्रबंधन करता है। Microsoft.AspNetCore.Mvc.Testing परीक्षण के लिए वेब एप्लिकेशन को मेमोरी में चलाने की अनुमति देता है।

\n\n

चरण 2: परीक्षणों के लिए आधार वर्ग बनाना

\n

एक अमूर्त वर्ग बनाते हैं जो परीक्षणों से पहले DB कंटेनर को चालू करेगा:

\n
using Testcontainers.PostgreSql;\nusing Xunit;\n\npublic abstract class IntegrationTestBase : IAsyncLifetime\n{\n    private readonly PostgreSqlContainer _postgresContainer;\n\n    protected string ConnectionString => _postgresContainer.GetConnectionString();\n\n    protected IntegrationTestBase()\n    {\n        _postgresContainer = new PostgreSqlBuilder()\n            .WithImage("postgres:16-alpine")\n            .WithDatabase("testdb")\n            .WithUsername("test")\n            .WithPassword("test123")\n            .Build();\n    }\n\n    public async Task InitializeAsync()\n    {\n        await _postgresContainer.StartAsync();\n    }\n\n    public async Task DisposeAsync()\n    {\n        await _postgresContainer.StopAsync();\n    }\n}
\n\n

यह वर्ग xUnit से IAsyncLifetime को लागू करता है, जो सभी परीक्षणों से पहले कंटेनर के शुरू होने और बाद में रुकने की गारंटी देता है। ConnectionString गतिशील रूप से कंटेनर से प्राप्त होता है - पोर्ट कोई भी खाली हो सकता है।

\n\n

चरण 3: Testcontainers और WebApplicationFactory के साथ परीक्षण लिखना

\n

अब परीक्षण लिखते हैं। हम परीक्षण HTTP क्लाइंट बनाने के लिए WebApplicationFactory का उपयोग करेंगे:

\n
using Microsoft.AspNetCore.Mvc.Testing;\nusing FluentAssertions;\nusing System.Net.Http.Json;\n\npublic class UserApiTests : IntegrationTestBase\n{\n    private readonly WebApplicationFactory<Program> _factory;\n\n    public UserApiTests()\n                

ब्लॉग

पुस्तक अनुशंसाएँ