اختبار 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
الإطار الأكثر شيو