دليل Testcontainers .NET لـ C# (.NET): دليل شامل مع أمثلة

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

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

ابدأ الدورة

Testcontainers .NET لـ C# (.NET): دليل شامل مع أمثلة

في تطوير البرمجيات الحديثة، يُعتبر الاختبار التكاملي مرحلة حاسمة للتحقق من تفاعل تطبيقك مع التبعيات الخارجية: قواعد البيانات، وسطاء الرسائل، أنظمة التخزين المؤقت، والخدمات الأخرى. تقليديًا، كان المطورون يستخدمون إما النماذج الوهمية (mocks/stubs)، التي لا توفر ثقة كاملة في صحة العمل، أو يقومون بتشغيل نسخ اختبارية من الخدمات يدويًا، وهو أمر معقد وبطيء وغير قابل للتكرار. مكتبة Testcontainers .NET تحل هذه المشكلة بشكل جذري: فهي تتيح لك إدارة حاويات Docker برمجيًا مباشرة من اختباراتك، مما يوفر بيئات خفيفة الوزن، لمرة واحدة، ومعزولة لكل سيناريو اختبار.

الفكرة الأساسية لـ Testcontainers هي جعل الاختبارات التكاملية بنفس سهولة وسرعة اختبارات الوحدة. كل ما عليك فعله هو كتابة اختبار تعلن فيه أنك بحاجة، على سبيل المثال، إلى PostgreSQL أو Redis. المكتبة تقوم تلقائيًا بتنزيل صورة Docker المناسبة (إذا لم تكن موجودة)، تشغيل الحاوية، انتظار جاهزيتها، وتزويدك بسلسلة الاتصال. بعد انتهاء الاختبار، يتم إيقاف الحاوية وحذفها تلقائيًا. هذا يضمن نقاء بيئة الاختبار، عدم وجود "بقايا"، وقابلية تكرار كاملة على أي جهاز مطور أو خادم CI.

Testcontainers .NET هي النسخة الرسمية المنقولة من مكتبة Testcontainers الشهيرة بلغة Java. وهي تدعم بشكل كامل نظام .NET البيئي، بما في ذلك xUnit و NUnit و MSTest. توفر المكتبة وحدات جاهزة لمعظم الخدمات الشائعة (قواعد البيانات، NoSQL، قوائم الانتظار، خوادم الويب) وتسمح بإنشاء حاويات مخصصة بسهولة لأي صورة Docker. استخدام Testcontainers .NET هو المعيار الحديث لكتابة اختبارات تكاملية موثوقة وعالية الجودة في مجتمع .NET.

التثبيت

لتثبيت مكتبة Testcontainers .NET، يتم استخدام مدير الحزم NuGet. قم بتنفيذ الأمر التالي في الطرفية في جذر مشروعك أو عبر وحدة تحكم مدير الحزم في Visual Studio:

dotnet add package Testcontainers

هذا الأمر سيقوم بتثبيت الحزمة الرئيسية Testcontainers، والتي تتضمن الفئات الأساسية ودعم الحاويات المخصصة. للعمل مع خدمات محددة (مثل PostgreSQL، MSSQL، Redis)، قد تحتاج إلى حزم إضافية. يتم تثبيتها بنفس الطريقة:

dotnet add package Testcontainers.PostgreSql
dotnet add package Testcontainers.Redis
dotnet add package Testcontainers.MsSql
dotnet add package Testcontainers.MongoDb
dotnet add package Testcontainers.RabbitMq

بعد تثبيت الحزم، تأكد من تشغيل Docker Daemon على جهازك (Docker Desktop لنظامي Windows/Mac أو Docker Engine لنظام Linux). Testcontainers تتواصل مع Docker عبر API الخاص به.

بداية سريعة: مثال عملي بسيط

لنكتب اختبارًا بسيطًا باستخدام xUnit، يقوم بتشغيل حاوية PostgreSQL، إنشاء جدول، إدراج بيانات، والتحقق من قراءتها. هذا المثال يوضح المبدأ الأساسي لعمل المكتبة.

using Testcontainers.PostgreSql;
using Xunit;
using Npgsql;

namespace MyIntegrationTests;

public class PostgresQuickStartTest : IAsyncLifetime
{
    private PostgreSqlContainer _postgresContainer;

    // IAsyncLifetime يسمح بإدارة دورة حياة الحاوية
    public async Task InitializeAsync()
    {
        // 1. تعريف الحاوية بالإعدادات الافتراضية
        _postgresContainer = new PostgreSqlBuilder()
            .WithImage("postgres:15-alpine") // تحديد الصورة
            .WithDatabase("testdb")          // اسم قاعدة البيانات
            .WithUsername("testuser")        // اسم المستخدم
            .WithPassword("testpassword")    // كلمة المرور
            .Build();                    

توصيات