اختبار C# (.NET): نظرة على الأطر والأدوات الرئيسية
الاختبار عالي الجودة هو جزء لا يتجزأ من تطوير برامج موثوقة على منصة .NET. في نظام C# البيئي، هناك العديد من الأطر والأدوات الناضجة التي تساعد في أتمتة التحقق من الكود على جميع المستويات: من اختبارات الوحدة إلى اختبارات التكامل واختبارات واجهة المستخدم. في هذه المقالة، سنستعرض الأدوات الرئيسية، وخصائصها، ونقدم أمثلة عملية على الاستخدام.
الأطر الرئيسية لاختبار الوحدة
غالبًا ما يقتصر اختيار إطار عمل لاختبار الوحدة في .NET على ثلاثة مرشحين رئيسيين: xUnit وNUnit وMSTest. جميعها تدعم السمات (Attributes) لتعريف الاختبارات، والتأكيدات (Assertions)، والتشغيل من سطر الأوامر أو بيئة التطوير المتكاملة (IDE).
xUnit.net
إطار عمل حديث ومتطور بنشاط، أنشأه مؤلف NUnit. يتميز بتصميم بسيط، والاستغناء عن السمة [TestFixture] لصالح استخدام المنشئات (Constructors) للتهيئة. يتكامل بشكل مثالي مع .NET Core و.NET 5+.
using Xunit;
public class CalculatorTests{ [Fact] public void Add_ShouldReturnSum_WhenTwoNumbersAreProvided() { // Arrange var calculator = new Calculator(); int a = 5, b = 3;
// Act int result = calculator.Add(a, b);
// Assert Assert.Equal(8, result); }
[Theory] [InlineData(2, 3, 5)] [InlineData(0, 0, 0)] [InlineData(-1, 1, 0)] public void Add_ShouldHandleVariousCases(int a, int b, int expected) { var calculator = new Calculator(); int result = calculator.Add(a, b); Assert.Equal(expected, result); }}الميزات الرئيسية: [Fact] للاختبارات العادية، [Theory] مع [InlineData] للاختبارات المعلمية (Parameterized)، دعم مدمج للاختبارات غير المتزامنة (Async).
NUnit
واحد من أقدم الأطر، ويستخدم على نطاق واسع في المشاريع المؤسسية. يوفر مجموعة غنية من السمات ([SetUp]، [TearDown]، [TestCase]) وآليات مرنة لإدارة سياق الاختبارات.
using NUnit.Framework;
[TestFixture]public class CalculatorTests{ private Calculator _calculator;
[SetUp] public void Setup() { _calculator = new Calculator(); }
[Test] [TestCase(1, 2, 3)] [TestCase(10, -5, 5)] public void Add_ShouldReturnCorrectSum(int a, int b, int expected) { int result = _calculator.Add(a, b); Assert.That(result, Is.EqualTo(expected)); }}الاختلافات: يتطلب السمة [TestFixture] للفئة، ويستخدم Assert.That(...) مع نموذج القيد (Constraint Model)، مما يجعل التأكيدات أكثر قابلية للقراءة.
MSTest
إطار عمل من Microsoft، مدمج في Visual Studio. سهل التعلم، ولكنه أقل مرونة من xUnit أو NUnit. غالبًا ما يُستخدم في المشاريع التي تكون فيها المعايير الموحدة على مستوى الشركة مهمة.
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]public class CalculatorTests{ [TestMethod] public void Add_ShouldReturnSum() { var calculator = new Calculator(); int result = calculator.Add(2, 3); Assert.AreEqual(5, result); }}مكتبات كائنات المحاكاة (Mock) والوهمية (Stub)
لعزل الكود المختبر عن التبعيات الخارجية (قواعد البيانات، واجهات برمجة التطبيقات API، نظام الملفات)، تُستخدم أطر المحاكاة (Mock Frameworks). الأكثر شيوعًا في .NET هي Moq وNSubstitute وFakeItEasy.
Moq
الأكثر شعبية. يسمح بإنشاء كائنات محاكاة ديناميكية بسهولة من خلال تعبيرات لامدا (Lambda Expressions).
using Moq;using Xunit;
public class OrderServiceTests{ [Fact] public void PlaceOrder_ShouldCallRepository_WhenVali