اختبار التكامل C# مع Docker: المستوى المتقدم

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

اختبار التكامل C# مع Docker: المستوى المتقدم

\n

اختبار التكامل هو مرحلة أساسية لضمان الجودة في تطبيقات .NET الحديثة. استخدام Docker يسمح بإنشاء بيئات معزولة وقابلة للتكرار، أقرب ما يكون إلى بيئة الإنتاج. في هذه المقالة، سنستعرض التقنيات المتقدمة لاختبار التكامل C# مع Docker: من إعداد Testcontainers إلى تنظيم خطوط أنابيب CI/CD.

\n

المادة موجهة للمطورين الذين هم على دراية بأساسيات اختبار الوحدات والمفاهيم الأساسية لـ Docker. سنتعمق في إدارة دورة حياة الحاويات، والعمل مع خدمات متعددة، وتصحيح الأخطاء، وتحسين وقت تنفيذ الاختبارات.

\n\n

1. إعداد Testcontainers لـ .NET

\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                

المدونات

توصيات الكتب