محتويات الدورة

iOS / Swift / التزامن وحدود البيانات / الدرس 12

Swift Testing وXCTest وحدود الاختبار

استخدم فحوص نماذج محددة وافصلها عن أدلة الواجهة والحفظ والجهاز المستضافة بأدوات Apple.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اختر أصغر حد يكشف العيب
  • أكّد السلوك بدلا من تكرار التنفيذ
  • تحكم بالاكتمال غير المتزامن بدلا من النوم

اختر أصغر حد يكشف العيب

يثبت اختبار المحلّل قاعدة إدخال، ويثبت اختبار النموذج بمستودع مزيف الانتقالات والترتيب، ويمارس اختبار أتمتة الواجهة التحكم في بيئة تطبيق. تتكامل الأدلة ولا تتبادل. حدّد الفشل قبل اختيار الإطار. تدعم Swift Testing اختبارات معبرة وتكامل التزامن بأدوات متوافقة، وتبقى XCTest مهمة للأجنحة القائمة واختبار الواجهة. افحص أدوات المشروع وتوافر الهدف بدلا من افتراض ترجمة ماكرو الاختبار في كل تثبيت Swift.

أكّد السلوك بدلا من تكرار التنفيذ

يفحص المقتطف الأول محللا صغيرا للعدد الموجب. توقعاته نتائج مجال ملموسة لا خوارزمية ثانية تكرر الفروع. أدرج حدود الغياب والنص المعيب والصفر والقيمة المقبولة حين تهم العقود. ينبغي للفشل تحديد السلوك المخالف. يتطلب المقتطف بيئة Swift Testing متوافقة وليس تطبيقا مستقلا. لم تُشغّل الاختبارات أثناء التأليف فنجاحها المتوقع توقع فقط. أبق العينات مصطنعة ولا تنسخ سجلات العملاء للواقعية.

swift مقتطف توضيحي من Swift أو SwiftUI؛ يتطلب بيئة الأدوات المبيّنة.
import Testing
func acceptedCount(_ text: String) -> Int? {
    guard let value = Int(text), value > 0 else { return nil }
    return value
}
@Test func positiveCountContract() {
    #expect(acceptedCount("4") == 4)
    #expect(acceptedCount("0") == nil)
    #expect(acceptedCount("four") == nil)
}
الناتج المتوقع
Expected: the three positive-count expectations pass in a compatible test host.

يقبل المحلّل عقد العدد الصحيح المعروض فقط. لم يُختبر توسيع الماكرو أو تنفيذه هنا.

تحكم بالاكتمال غير المتزامن بدلا من النوم

لنتائج متقادمة امنح البديل طلبات معلقة مستقلة يحلها الاختبار بترتيب مختار. ابدأ A وB وأكمل B ثم A وافحص المقبول. وللإلغاء توقف عند نقطة معروفة وألغ قبل المتابعة. قد ينجح تأخير اعتباطي دون اختبار السباق. أظهر ملكية الاستمرارات وتأكد من استئناف كل منها مرة واحدة في كل مسار. فقد يعلق الجناح بسبب بديل يسرب مهاما أو لا يحل بعد تأكيد فاشل ويخفي العيب الأصلي.

استخدم XCTest حين يناسب حد الجناح

يوضح المقتطف الثاني تأكيد XCTest لعملية نموذج من المستوى الأساسي. ينشئ نموذجا جديدا داخل الاختبار لمنع تعديل مشترك بين اختبارات متزامنة. لا تعتمد على مسودة عامة غيّرها الاختبار السابق. تختلف واجهات التأكيد، لكن العزل وجودة النتيجة أهم من التحويل الآلي للصياغة. وفي الواجهة فعّل تحكما عاما ميسّرا وافحص نتائج مفهومة؛ فاستدعاء حفظ خاص اختبار نموذج لا دليل على وصول المستخدم أو فهمه.

swift مقتطف توضيحي من Swift أو SwiftUI؛ يتطلب بيئة الأدوات المبيّنة.
import XCTest
final class WorkshopValueTests: XCTestCase {
    func testReservationPreservesOriginalSnapshot() throws {
        let original = try Workshop(id: "w-7", seats: 5)
        var draft = original
        try draft.reserve(2)
        XCTAssertEqual(original.seats, 5)
        XCTAssertEqual(draft.seats, 3)
    }
}
الناتج المتوقع
Expected: the original remains 5 and the independently edited draft becomes 3.

يتطلب نموذج Workshop من الدرس الأساسي وهدف XCTest. لا يُدّعى تشغيل مترجم أو محاكي.

افصل البدائل من ضمانات التكامل

يفحص مستودع ذاكرة مزيف استجابة التطبيق للفشل، لكنه لا يثبت نقل URLSession أو ديمومة SwiftData أو Keychain أو الأذونات أو التوقيع. يختبر حفظ الذاكرة أكثر من بديل نقي لكنه يختلف عن استرداد جهاز بعد إعادة البدء. اذكر التنفيذ المستعمل والحد المعبر. واستخدم تكامل الهدف لعقود تشغيل Apple أو إعداد النظام في بيئة معزولة مصرح بها. لا تعمم النجاح المحلي إلى اعتماد كل الأجهزة وإعدادات الإتاحة.

أبلغ عن إعادة الإنتاج والحدود غير المنفذة

سجّل إصدار المترجم ونمط اللغة وSDK وهدف الاختبار وقفل الاعتماديات والعينة المصغرة للأخطاء المهمة. وللصور اضبط الجهاز واللغة وحجم النص والخطوط، وراجع التغير قبل تحديث المرجع. أبق بيان تحقق موجزا يحدد المنفذ وحدود الهدف الباقية. تفحص الدورة المخطط والمحتوى الثنائي، وتبقى Swift Testing وXCTest والأتمتة وأمثلة Apple غير منفذة. تدعم التوقعات التعليم ولا تُنسخ كتسجيل تنفيذ في تقرير مشروع.

الأخطاء الشائعة وإصلاحها

ينجح اختبار التوقيت أحيانا فقط

لماذا يحدث؟
استبدل النوم التحكم الصريح بالاكتمال.
كيف تصلحه؟
استخدم ردودا مزيفة محددة أو نقاط استمرار محدودة.
كيف تتجنب تكراره؟
اختبر الترتيب المسبب للمشكلة مباشرة.

تؤثر الاختبارات بعضها في بعض بحالة مشتركة

لماذا يحدث؟
تعيش عينة عامة متغيرة بعد كل اختبار.
كيف تصلحه؟
أنشئ نماذج واعتماديات معزولة لكل حالة.
كيف تتجنب تكراره؟
راع التوازي الموثق للإطار.

يسمى نجاح حفظ مزيف تحقق ديمومة

لماذا يحدث؟
لم يختبر التنفيذ الحد المدعى.
كيف تصلحه؟
أبلغ عن السياسة المزيفة وسياق الذاكرة وحفظ الجهاز منفصلة.
كيف تتجنب تكراره؟
سمّ البيئة الفعلية في التقارير.

اختبر فهمك

1. ماذا يثبت اختبار لقطة XCTest عن حجز خادم حقيقي؟

اعرض الحل المشروح

لا يثبت قبول الخادم أو السعة المتزامنة. يفحص نسخ النموذج المحلي وتعديله. أضف أدلة خدمة وهدف للتفويض والتعارض والاكتمال غير المؤكد، ولا تضعف النتيجة المحلية المفيدة بادعاء أوسع.

2. هل تختبر كل دالة مساعدة باختبار يكرر تنفيذها؟

اعرض الحل المشروح

لا. ركّز العقود المرصودة ومخاطر الفشل المهمة. قد يحفظ تكرار الحساب العيب نفسه. اختر حدودا وثوابت ونتائج تفاعل تميز الصحيح من تنفيذ خاطئ مقنع.

أهم ما تعلمته

  • اختر أصغر حد يكشف العيب
  • أبلغ عن إعادة الإنتاج والحدود غير المنفذة

المراجع الرسمية