اختبار C# (.NET): نظرة شاملة على الأطر والأدوات

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

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

ابدأ الدورة

اختبار C# (.NET): الأطر والأدوات



الاختبار هو جزء لا يتجزأ من التطوير الاحترافي على منصة .NET. التغطية الجيدة للكود بالاختبارات تقلل من عدد الأخطاء، تبسط إعادة الهيكلة، وتزيد الثقة في المنتج. في النظام البيئي لـ C#، يوجد العديد من الأطر والأدوات الناضجة، كل منها يحل مهامًا محددة: من اختبارات الوحدة إلى الفحوصات التكاملية واختبارات واجهة المستخدم. في هذه المقالة، سنستعرض الأدوات الرئيسية، إمكانياتها، وأمثلة على استخدامها.



الأطر الرئيسية لاختبارات الوحدة



اختبارات الوحدة (Unit Testing) هي أساس هرم الاختبارات. في .NET Core / .NET 5+، أصبح xUnit.net هو المعيار الفعلي، على الرغم من أن NUnit و MSTest لا يزالان مستخدمين بنشاط.



xUnit.net

إطار حديث ومرن والأكثر شيوعًا. يعمل على مبدأ "الحقائق" (facts) و"النظريات" (theories).

  • الحقائق (Fact) — اختبارات بسيطة بدون معاملات.
  • النظريات (Theory) — اختبارات ذات معاملات مع بيانات من السمات [InlineData] أو [MemberData].
  • لا يتطلب السمة [TestClass] — أي فئة عامة يمكن أن تحتوي على اختبارات.
using Xunit;

public class CalculatorTests{ [Fact] public void Add_ShouldReturnSum() { // Arrange var calc = new Calculator(); // Act var result = calc.Add(2, 3); // Assert Assert.Equal(5, result); }

[Theory] [InlineData(1, 2, 3)] [InlineData(-1, -1, -2)] public void Add_WithMultipleInputs_ShouldReturnCorrectSum(int a, int b, int expected) { var calc = new Calculator(); var result = calc.Add(a, b); Assert.Equal(expected, result); }}


NUnit

إطار كلاسيكي ذو تاريخ غني. يتميز بسمات قوية ودعم للمعاملات.

  • يستخدم السمات [Test]، [TestCase]، [SetUp].
  • يدعم التنفيذ المتوازي للاختبارات.
  • مناسب للسيناريوهات المعقدة مع بيانات الاختبار.
using NUnit.Framework;

[TestFixture]public class CalculatorNUnitTests{ [Test] public void Subtract_ShouldReturnDifference() { var calc = new Calculator(); var result = calc.Subtract(10, 4); Assert.That(result, Is.EqualTo(6)); }

[TestCase(5, 3, 2)] [TestCase(0, 0, 0)] public void Subtract_WithParameters_ShouldReturnCorrect(int a, int b, int expected) { var calc = new Calculator(); Assert.That(calc.Subtract(a, b), Is.EqualTo(expected)); }}


MSTest

الإطار المدمج من Microsoft. مثالي للمشاريع البسيطة والفرق التي تعمل في نظام Visual Studio البيئي.

  • السمات: [TestMethod]، [TestClass]، [DataRow].
  • تكامل وثيق مع Azure DevOps وخطوط أنابيب CI/CD.
using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]public class CalculatorMSTests{ [TestMethod] public void Multiply_ShouldReturnProduct() { var calc = new Calculator(); var result = calc.Multiply(4, 5); Assert.AreEqual(20, result); }

[DataRow(2, 3, 6)] [DataRow(0, 100, 0)] [DataTestMethod] public void Multiply_WithDataRows_ShouldReturnCorrect(int a, int b, int expected) { var calc = new Calculator(); Assert.AreEqual(expected, calc.Multiply(a, b)); }}


مكتبات كائنات المحاكاة (Mock) والعزل

في اختبارات الوحدة، غالبًا ما يكون من الضروري عزل الكود المختبر عن التبعيات الخارجية (قاعدة بيانات، API، نظام الملفات). لهذا الغرض، تُستخدم أطر المحاكاة (Mock frameworks).



Moq

الإطار الأكثر شيو

توصيات