ما هو XCTest ولماذا هو مطلوب؟
XCTest هو إطار عمل مدمج من Apple لاختبار الوحدات والوظائف والأداء لتطبيقات Swift (iOS, macOS, watchOS, tvOS). وهو مشابه لمكتبات مثل pytest للغة Python أو JUnit للغة Java، ولكنه مدمج بالكامل في Xcode و Swift Package Manager. يسمح XCTest بالتحقق تلقائياً من صحة عمل الدوال والكلاسات ومكونات واجهة المستخدم وطلبات الشبكة الفردية، وهو أمر بالغ الأهمية للحفاظ على جودة الكود عند تطوير التطبيقات الأصلية.
كيفية تثبيت XCTest؟
يأتي XCTest مع Xcode ولا يتطلب تثبيتاً منفصلاً. لبدء العمل، يكفي إنشاء مشروع جديد في Xcode وإضافة هدف للاختبارات (iOS Unit Testing Bundle أو macOS Unit Testing Bundle). إذا كنت تستخدم Swift Package Manager، فما عليك سوى إضافة التبعية import XCTest إلى ملف الاختبار الخاص بك. للتكامل مع CI/CD (مثل GitHub Actions)، أضف السكريبت: xcodebuild test -scheme YourScheme -destination 'platform=iOS Simulator,name=iPhone 14'.
الوظائف الرئيسية لـ XCTest
- اختبارات الوحدات (Unit Tests) — التحقق من الدوال والكلاسات الفردية باستخدام
XCTAssert. - اختبارات الأداء — قياس وقت تنفيذ أجزاء الكود عبر
measure. - اختبارات واجهة المستخدم (UI Tests) — أتمتة التفاعل مع الواجهة عبر
XCUIApplication. - الاختبار غير المتزامن — العمل مع التوقعات عبر
XCTestExpectation. - الاختبارات المعلمية — تشغيل اختبار واحد ببيانات إدخال مختلفة (عبر الحلقات).
مثال على كود Swift (iOS)
import XCTest
class CalculatorTests: XCTestCase { var calculator: Calculator!
override func setUp() { super.setUp() calculator = Calculator() }
override func tearDown() { calculator = nil super.tearDown() }
func testAddition() { let result = calculator.add(2, 3) XCTAssertEqual(result, 5, "كان متوقعاً 5، تم الحصول على \\(result)") }
func testPerformanceExample() { measure { _ = calculator.add(1000, 2000) } }
func testAsyncNetwork() { let expectation = self.expectation(description: "تحميل البيانات") NetworkService.fetchData { data in XCTAssertNotNil(data) expectation.fulfill() } waitForExpectations(timeout: 5) }}متى يتم استخدام XCTest؟
XCTest إلزامي لجميع مشاريع iOS/macOS التجارية، خاصة إذا كنت تعمل ضمن فريق أو تخطط للنشر في App Store. يساعد في منع الانحدارات أثناء إعادة الهيكلة، ويسرع مراجعة الكود، ويؤتمت التحقق من واجهة المستخدم. لاختبار طلبات الشبكة والعمل مع قاعدة البيانات، يتم دمج XCTest مع الكائنات الوهمية (مثل OHHTTPStubs). إذا كنت تكتب مكتبة بلغة Swift، فإن XCTest هو المعيار الفعلي، لأنه مدعوم بالكامل من Xcode و Swift Package Index.