اختبار C#: اختبارات الوحدة والتكامل والنهاية إلى النهاية لمشاريع .NET

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

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

ابدأ الدورة

الاختبار في C#: الوحدة والتكامل وE2E — دليل شامل لمطور .NET



جودة البرمجيات تبدأ بالاختبارات. في بيئة C# (.NET)، توجد ثقافة اختبار راسخة تشمل ثلاثة مستويات رئيسية: اختبارات الوحدة (unit)، واختبارات التكامل (integration)، والاختبارات الشاملة (E2E). في هذه المقالة، سنشرح كل مستوى بأمثلة عملية، ونعرض أفضل المكتبات، ونوضح كيفية بناء استراتيجية اختبار فعالة لمشروع .NET الخاص بك.



1. اختبار الوحدة في C#: أساس جودة الكود



اختبارات الوحدة (Unit tests) تتحقق من عمل المكونات الفردية للبرنامج — مثل الدوال، الكلاسات، والطرق — بشكل معزول عن التبعيات الخارجية. في .NET، الأطر الرئيسية هي xUnit وNUnit وMSTest. الأكثر شيوعًا هو xUnit بفضل مرونته وتكامله مع .NET Core.



مكتبات اختبارات الوحدة:

  • xUnit — الإطار الرئيسي (موصى به من Microsoft)
  • Moq — إنشاء كائنات mock لعزل التبعيات
  • FluentAssertions — تعبيرات تأكيد محسّنة
  • AutoFixture — توليد تلقائي لبيانات الاختبار


مثال على اختبار وحدة باستخدام xUnit مع Moq:



using Xunit;using Moq;using FluentAssertions;

public class OrderServiceTests{ [Fact] public void CalculateTotal_WithValidItems_ReturnsCorrectSum() { // Arrange var mockRepo = new Mock<IProductRepository>(); mockRepo.Setup(r => r.GetPrice(1)).Returns(100m); mockRepo.Setup(r => r.GetPrice(2)).Returns(50m);

var service = new OrderService(mockRepo.Object); var items = new List<OrderItem> { new OrderItem { ProductId = 1, Quantity = 2 }, new OrderItem { ProductId = 2, Quantity = 1 } };

// Act var total = service.CalculateTotal(items);

// Assert total.Should().Be(250m); mockRepo.Verify(r => r.GetPrice(1), Times.Once); mockRepo.Verify(r => r.GetPrice(2), Times.Once); }}


نصائح لاختبارات الوحدة:

  • اتبع نمط AAA (Arrange, Act, Assert)
  • اختبار واحد — تحقق واحد (تأكيد واحد)
  • استخدم [Theory] مع [InlineData] للمعلمات
  • لا تختبر الخدمات الخارجية — استخدم mock objects


2. اختبار التكامل: التحقق من تفاعل المكونات



اختبارات التكامل (Integration tests) تتحقق من كيفية عمل الوحدات المختلفة للنظام معًا: قاعدة البيانات، نظام الملفات، واجهات API الخارجية. على عكس اختبارات الوحدة، نستخدم هنا تبعيات حقيقية أو قريبة من الحقيقية.



أدوات اختبار التكامل في .NET:

  • Microsoft.AspNetCore.TestHost — خادم ويب مضمن
  • TestContainers — حاويات لقواعد البيانات (PostgreSQL, SQL Server, Redis)
  • Respawn — تنظيف قاعدة البيانات بين الاختبارات
  • WebApplicationFactory<T> — إنشاء مضيف اختبار


مثال على اختبار تكامل باستخدام TestContainers وWebApplicationFactory:



using Microsoft.AspNetCore.Mvc.Testing;using Testcontainers.PostgreSql;using Xunit;

public class UserApiIntegrationTests : IAsyncLifetime{ private readonly PostgreSqlContainer _dbContainer; private WebApplicationFactory<Program> _factory;

public UserApiIntegrationTests() { _dbContainer = new PostgreSqlBuilder() .WithImage("postgres:15") .WithDatabase("testdb") .WithUsername("tes

المدونات

توصيات الكتب