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

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

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

ابدأ الدورة

ما هي هذه المكتبة ولماذا هي مطلوبة

\n\n

xUnit و NUnit هما أشهر مكتبتين للاختبارات الوحدوية (unit testing) في بيئة .NET (C#, F#, VB.NET). تسمحان للمطورين بكتابة اختبارات آلية تتحقق من صحة عمل الوحدات الفردية للبرنامج (الفئات، الطرق، الدوال).

\n\n

لماذا هذا مطلوب؟

\n
    \n
  • اكتشاف الأخطاء في المراحل المبكرة: يتم تشغيل الاختبارات بعد كل تغيير في الكود، مما يسمح باكتشاف الانحدارات (عندما يكسر الكود الجديد الوظائف القديمة) فورًا.
  • \n
  • إعادة الهيكلة دون خوف: يمكنك إعادة كتابة الكود بثقة إذا كنت متأكدًا من أن الاختبارات تغطيه. إذا نجحت الاختبارات، فكل شيء يعمل كما كان.
  • \n
  • توثيق عملي: تُظهر الاختبارات كيفية استخدام طريقة معينة بالضبط، وما هي المعاملات التي تقبلها وما الذي تعيده.
  • \n
  • التكامل مع CI/CD: يتم تشغيل الاختبارات تلقائيًا على خوادم البناء (GitHub Actions, Azure DevOps, Jenkins) قبل النشر.
  • \n
\n\n

الفرق بين xUnit و NUnit:

\n
    \n
  • NUnit — مكتبة أقدم (منقولة من Java JUnit)، تستخدم السمات [Test]، [SetUp]، [TearDown]. لديها مجموعة غنية من السمات للمعلمات.
  • \n
  • xUnit — مكتبة أحدث، أنشأها مؤلف NUnit. تستخدم السمة [Fact] للاختبارات العادية و [Theory] للاختبارات المعلمية. تتميز بنهج أكثر صرامة لعزل الاختبارات (كل اختبار هو نسخة جديدة من الفئة).
  • \n
\n\n

في هذه المقالة، سننظر في كلتا المكتبتين، لكننا سنركز بشكل أساسي على xUnit، حيث توصي بها Microsoft للمشاريع الجديدة.

\n\n

التثبيت

\n\n

يتم التثبيت عبر مدير الحزم NuGet. يمكنك استخدام وحدة تحكم مدير الحزم (Package Manager Console) أو .NET CLI.

\n\n

تثبيت xUnit

\n
// عبر .NET CLI\ndotnet add package xunit\ndotnet add package xunit.runner.visualstudio\n\n// عبر Package Manager Console\nInstall-Package xunit\nInstall-Package xunit.runner.visualstudio
\n\n

تثبيت NUnit

\n
// عبر .NET CLI\ndotnet add package NUnit\ndotnet add package NUnit3TestAdapter\n\n// عبر Package Manager Console\nInstall-Package NUnit\nInstall-Package NUnit3TestAdapter
\n\n

هام: لتشغيل الاختبارات في Visual Studio أو Rider، يلزم أيضًا تثبيت محول مشغل الاختبارات (مثل xunit.runner.visualstudio أو NUnit3TestAdapter).

\n\n

بداية سريعة مع مثال كود

\n\n

لنفترض أن لدينا فئة بسيطة Calculator مع طريقة Add. سنكتب لها اختبارات في xUnit و NUnit.

\n\n

الفئة المراد اختبارها (Calculator.cs)

\n
public class Calculator\n{\n    public int Add(int a, int b)\n    {\n        return a + b;\n    }\n\n    public int Divide(int a, int b)\n    {\n        if (b == 0)\n            throw new DivideByZeroException("لا يمكن القسمة على صفر!");\n        return a / b;\n    }\n}
\n\n

اختبار في xUnit (CalculatorTests.cs)

\n
using Xunit;\n\npublic class CalculatorTests\n{\n    [Fact]\n    public void Add_ShouldReturnSum_WhenTwoPositiveNumbers()\n    {\n        // Arrange (التحضير)\n        var calculator = new Calculator();\n        int a = 5;\n        int b = 3;\n\n        // Act (الإجراء)\n        int result = calculator.Add(a, b);\n\n        // Assert (التحقق)\n        Assert.Equal(8, result);\n    }\n\n    [Fact]\n    public void Divide_ShouldThrowException_WhenDivideByZero()\n    {\n        var calculator = new Calculator();\n\n        Assert.Throws<DivideByZeroException>(() => calculator.Divide(10, 0));\n    }\n}
\n\n

اختبار في NUnit (CalculatorTest

توصيات