0Pricing
C# Academy · درس

إعداد xUnit/MSTest والتوكيدات

تعلّم بنية الاختبار (Arrange-Act-Assert)، وشاهد كيف تؤدي التوكيدات الفاشلة إلى فشل الاختبارات، واربط هذه الأفكار بسمات MSTest/xUnit.

إعداد xUnit/MSTest والتوكيدات درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.

ما اختبار الوحدة؟

الهدف: كتابة اختبارات وحدات صغيرة قابلة للتكرار.

  • يستخدم مشروع اختبار منفصل MSTest أو xUnit
  • يتحقق كل اختبار من سلوك واحد
  • استخدم أسماء واضحة وتأكيدات

نمط AAA

تتبع الاختبارات النمط Arrange → Act → Assert. ونحاكي هنا تأكيدًا باستخدام فحص بسيط.

using System;

public static class MathUtil
{
  // Method under test
  public static int Add(int a, int b)
  {
    return a + b;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    // Arrange
    int a = 2;
    int b = 3;
    int expected = 5;

    // Act
    int actual = MathUtil.Add(a, b);

    // Assert (manual check for this console demo)
    if (actual == expected)
      Console.WriteLine("PASS: Add returned " + actual);
    else
      Console.WriteLine("FAIL: expected " + expected + " but got " + actual);
  }
}

سلوك التأكيد

يُطلق التأكيد استثناءً عند عدم التطابق. وتعمل الأطر الحقيقية بطريقة مماثلة (واجهة برمجية أغنى وتقارير أفضل).

using System;

public static class Assert
{
  public static void AreEqual(int expected, int actual)
  {
    if (expected != actual)
      throw new Exception("AreEqual failed: expected " + expected + ", actual " + actual);
  }

  public static void IsTrue(bool condition, string message)
  {
    if (!condition) throw new Exception("IsTrue failed: " + message);
  }
}

public static class MathUtil
{
  public static int Mul(int a, int b) { return a * b; }
}

public class Program
{
  public static void Main(string[] args)
  {
    try
    {
      int r = MathUtil.Mul(2, 4);
      Assert.AreEqual(8, r);                 // pass
      Assert.IsTrue(r % 2 == 0, "even");     // pass
      Console.WriteLine("All assertions passed.");
    }
    catch (Exception ex)
    {
      Console.WriteLine("TEST FAILED: " + ex.Message);
    }
  }
}

مثال على اختبارات ناجحة

يتحقق كل اختبار من سلوك واحد. وفي MSTest/xUnit الحقيقي، يؤدي فشل Assert إلى وضع علامة حمراء على الاختبار.

using System;

public static class StringUtil
{
  public static string Repeat(string s, int n)
  {
    if (n < 0) throw new ArgumentOutOfRangeException("n");
    string r = "";
    for (int i = 0; i < n; i++) r += s;
    return r;
  }
}

public static class Assert
{
  public static void AreEqual(string expected, string actual)
  {
    if (expected != actual)
      throw new Exception("AreEqual failed: expected [" + expected + "], actual [" + actual + "]");
  }
}

public class Program
{
  static void TestRepeat_Happy()
  {
    string got = StringUtil.Repeat("ab", 3);
    Assert.AreEqual("ababab", got); // pass
  }

  static void TestRepeat_EmptyTimesZero()
  {
    string got = StringUtil.Repeat("x", 0);
    Assert.AreEqual("", got); // pass
  }

  public static void Main(string[] args)
  {
    try { TestRepeat_Happy(); Console.WriteLine("PASS: Happy"); } catch (Exception ex) { Console.WriteLine("FAIL: Happy -> " + ex.Message); }
    try { TestRepeat_EmptyTimesZero(); Console.WriteLine("PASS: Zero"); } catch (Exception ex) { Console.WriteLine("FAIL: Zero -> " + ex.Message); }
  }
}

مطابقة MSTest مع xUnit

أساسيات MSTest:

  • [TestClass] على الفئة
  • [TestMethod] على كل اختبار
  • Assert.AreEqual/IsTrue/AreNotEqual…

أساسيات xUnit:

  • [Fact] لدالة اختبار
  • Assert.Equal/True/False…
  • لا حاجة إلى سمة لفئة الاختبار

نصائح حول التسمية والنطاق

نصائح:

  • سمِّ الاختبارات وفق النمط Method_Scenario_ExpectedResult
  • استخدم تأكيدًا واحدًا أو سلوكًا واحدًا لكل اختبار
  • اجعل الاختبارات صغيرة ومستقلة

التأكيدات تتسبب في الفشل

تحقق سريع: ما الذي يتسبب فعليًا في فشل اختبار الوحدة في MSTest أو xUnit؟

مراجعة

مراجعة: استخدم نمط AAA، وقارن المتوقع بالفعلي باستخدام التأكيدات، ثم طبّق ذلك في MSTest ([TestMethod]) أو xUnit ([Fact]).

الأسئلة الشائعة

هل درس «إعداد xUnit/MSTest والتوكيدات» مجاني؟

نعم — نص درس «إعداد xUnit/MSTest والتوكيدات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.

ماذا ستتعلم في «إعداد xUnit/MSTest والتوكيدات»؟

تعلّم بنية الاختبار (Arrange-Act-Assert)، وشاهد كيف تؤدي التوكيدات الفاشلة إلى فشل الاختبارات، واربط هذه الأفكار بسمات MSTest/xUnit. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.

كم من الوقت يستغرق درس «إعداد xUnit/MSTest والتوكيدات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إعداد xUnit/MSTest والتوكيدات
  2. التزييف عبر الواجهات ومنشئو بيانات الاختبار
  3. تصحيح أخطاء الاختبارات الفاشلة
← العودة إلى C# Academy