Docker के साथ C# एकीकरण परीक्षण: उन्नत स्तर
\nएकीकरण परीक्षण आधुनिक .NET अनुप्रयोगों में गुणवत्ता सुनिश्चित करने का एक महत्वपूर्ण चरण है। Docker का उपयोग करके, आप पृथक, पुनरुत्पादनीय वातावरण बना सकते हैं जो प्रोडक्शन के जितना संभव हो उतना करीब हो। इस लेख में, हम Docker के साथ C# एकीकरण परीक्षण की उन्नत तकनीकों पर चर्चा करेंगे: Testcontainers के सेटअप से लेकर CI/CD पाइपलाइनों के आयोजन तक।
\nयह सामग्री उन डेवलपर्स के लिए है जो पहले से ही यूनिट परीक्षण की मूल बातें और Docker की बुनियादी अवधारणाओं से परिचित हैं। हम कंटेनरों के जीवनचक्र प्रबंधन, कई सेवाओं के साथ काम करने, डिबगिंग और परीक्षण निष्पादन समय के अनुकूलन में गहराई से उतरेंगे।
\n\n1. .NET के लिए Testcontainers सेटअप
\nTestcontainers एक लाइब्रेरी है जो परीक्षण कोड से Docker कंटेनरों का प्रबंधन करती है। यह स्वचालित रूप से कंटेनर बनाता है, चलाता है और रोकता है, प्रत्येक परीक्षण के लिए पृथक्करण सुनिश्चित करता है।
\nआरंभ करने के लिए, अपने परीक्षण प्रोजेक्ट में पैकेज स्थापित करें:
\ndotnet add package Testcontainers\nPostgreSQL के साथ रिपॉजिटरी परीक्षण का एक बुनियादी उदाहरण:
\nusing 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 का उपयोग करें। यह सुनिश्चित करता है कि प्रत्येक परीक्षण वर्ग को डेटाबेस का एक नया उदाहरण मिले।
2. Docker Compose के साथ मल्टी-कंटेनर आर्किटेक्चर
\nवास्तविक अनुप्रयोग कई सेवाओं पर निर्भर करते हैं: डेटाबेस, संदेश कतार, कैश। Testcontainers Docker Compose का समर्थन करता है, जिससे पूरे बुनियादी ढांचे को चलाया जा सकता है।
\nअतिरिक्त पैकेज स्थापित करें:
\ndotnet add package Testcontainers.Compose\ndocker-compose.test.yml फ़ाइल का उदाहरण:
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परीक्षण में उपयोग:
\nusing 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