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

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

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

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

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

\n

एकीकरण परीक्षण आधुनिक .NET अनुप्रयोगों में गुणवत्ता सुनिश्चित करने का एक महत्वपूर्ण चरण है। Docker का उपयोग करके, आप पृथक, पुनरुत्पादनीय वातावरण बना सकते हैं जो प्रोडक्शन के जितना संभव हो उतना करीब हो। इस लेख में, हम Docker के साथ C# एकीकरण परीक्षण की उन्नत तकनीकों पर चर्चा करेंगे: Testcontainers के सेटअप से लेकर CI/CD पाइपलाइनों के आयोजन तक।

\n

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

\n\n

1. .NET के लिए Testcontainers सेटअप

\n

Testcontainers एक लाइब्रेरी है जो परीक्षण कोड से Docker कंटेनरों का प्रबंधन करती है। यह स्वचालित रूप से कंटेनर बनाता है, चलाता है और रोकता है, प्रत्येक परीक्षण के लिए पृथक्करण सुनिश्चित करता है।

\n

आरंभ करने के लिए, अपने परीक्षण प्रोजेक्ट में पैकेज स्थापित करें:

\n
dotnet add package Testcontainers
\n

PostgreSQL के साथ रिपॉजिटरी परीक्षण का एक बुनियादी उदाहरण:

\n
using Testcontainers.PostgreSql;\nusing Xunit;\n\npublic class UserRepositoryTests : IAsyncLifetime\n{\n    private readonly PostgreSqlContainer _postgresContainer;\n\n    public UserRepositoryTests()\n    {\n        // PostgreSQL के साथ कंटेनर कॉन्फ़िगर करें\n        _postgresContainer = new PostgreSqlBuilder()\n            .WithImage("postgres:15")\n            .WithDatabase("testdb")\n            .WithUsername("test")\n            .WithPassword("test123")\n            .WithCleanUp(true)\n            .Build();\n    }\n\n    public async Task InitializeAsync()\n    {\n        // सभी परीक्षणों से पहले कंटेनर चलाएं\n        await _postgresContainer.StartAsync();\n    }\n\n    public async Task DisposeAsync()\n    {\n        // कंटेनर रोकें और हटाएं\n        await _postgresContainer.DisposeAsync();\n    }\n\n    [Fact]\n    public async Task AddUser_ShouldCreateUser()\n    {\n        // कंटेनर से कनेक्शन स्ट्रिंग प्राप्त करें\n        var connectionString = _postgresContainer.GetConnectionString();\n        var repository = new UserRepository(connectionString);\n\n        await repository.AddUserAsync(new User { Name = "Test User" });\n        var user = await repository.GetUserByNameAsync("Test User");\n\n        Assert.NotNull(user);\n        Assert.Equal("Test User", user.Name);\n    }\n}
\n

महत्वपूर्ण: कंटेनर प्रबंधन के लिए IAsyncLifetime का उपयोग करें। यह सुनिश्चित करता है कि प्रत्येक परीक्षण वर्ग को डेटाबेस का एक नया उदाहरण मिले।

\n\n

2. Docker Compose के साथ मल्टी-कंटेनर आर्किटेक्चर

\n

वास्तविक अनुप्रयोग कई सेवाओं पर निर्भर करते हैं: डेटाबेस, संदेश कतार, कैश। Testcontainers Docker Compose का समर्थन करता है, जिससे पूरे बुनियादी ढांचे को चलाया जा सकता है।

\n

अतिरिक्त पैकेज स्थापित करें:

\n
dotnet add package Testcontainers.Compose
\n

docker-compose.test.yml फ़ाइल का उदाहरण:

\n
version: '3.8'\nservices:\n  postgres:\n    image: postgres:15\n    environment:\n      POSTGRES_USER: test\n      POSTGRES_PASSWORD: test\n      POSTGRES_DB: testdb\n  redis:\n    image: redis:7-alpine
\n

परीक्षण में उपयोग:

\n
using Testcontainers.Compose;\n\npublic class OrderServiceTests\n{\n    private readonly DockerComposeContainer _compose;\n\n    public OrderServiceTests()\n    {\n        _compose = new DockerComposeContainer()\n            .WithComposeFilePath("docker-compose.test.yml")\n            .WithEnvironment("ASPNETCORE_ENVIRONMENT", "Testing")\n            .Build();\n    }\n\n    [Fact]\n    public async Task CreateOrder_ShouldSaveToDbAndCache()\n    {\n        await _compose.StartAsync();\n        \n        var dbConnection = _compose.GetConnectionString("postgres", 5432);\n        var redisConnection = _compose.GetConnectionString("redis", 6379                

ब्लॉग

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