إعداد XCTestCase والتنظيف وطرائق الاختبار
نظّموا أصناف الاختبار باستخدام setUp وtearDown وسمّوا طرائق الاختبار.
إعداد XCTestCase والتنظيف وطرائق الاختبار درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
أساسيات XCTestCase
يمثل XCTestCase الفئة الأساسية لجميع اختبارات الوحدات في Swift. كل دالة يبدأ اسمها بـ "test" تُعد حالة اختبار.
import XCTest
final class MathTests: XCTestCase {
func testAddition() {
XCTAssertEqual(2 + 2, 4)
}
}setUp وtearDown
تُشغّل setUp() قبل كل اختبار، بينما تُشغّل tearDown() بعد كل اختبار. استخدمهما لتهيئة الحالة المشتركة وتنظيفها.
final class UserServiceTests: XCTestCase {
var sut: UserService!
override func setUp() {
super.setUp()
sut = UserService()
}
override func tearDown() {
sut = nil
super.tearDown()
}
}setUpWithError وtearDownWithError
نسختان تُلقيان الأخطاء من setUp/tearDown: إذا ألقى الإعداد خطأً، يُعلّم الاختبار على أنه فاشل تلقائيًا.
override func setUpWithError() throws {
sut = try UserService(config: loadTestConfig())
}
override func tearDownWithError() throws {
try sut.cleanup()
}الإعداد على مستوى الفئة
تُشغّل class setUp() وclass tearDown() مرة واحدة قبل جميع الاختبارات في الفئة أو بعدها، وهما مفيدان للموارد المشتركة المكلفة.
final class DBTests: XCTestCase {
static var db: TestDatabase!
override class func setUp() {
super.setUp()
db = TestDatabase.inMemory()
}
override class func tearDown() {
db.close()
super.tearDown()
}
}تسمية دوال الاختبار
سمِّ الاختبارات بصيغة test_methodName_condition_expectedResult لتحسين سهولة القراءة ووضوح رسائل الفشل.
func test_login_withValidCredentials_returnsUser() throws { ... }
func test_login_withInvalidPassword_throwsUnauthorized() throws { ... }addTeardownBlock
سجّل كتل تنظيف خاصة بكل اختبار مباشرةً دون تجاوز tearDown.
func testCreateFile() throws {
let url = FileManager.default.temporaryDirectory.appendingPathComponent("test.txt")
addTeardownBlock { try? FileManager.default.removeItem(at: url) }
// ... test
}تعطيل الاختبارات
ضع _ في بداية اسم دالة الاختبار أو علّقها لتخطيها. يدعم XCTest أيضًا التخطي باستخدام XCTSkipIf.
func testExperimentalFeature() throws {
try XCTSkipIf(ProcessInfo.processInfo.environment["CI"] != nil, "Skip on CI")
// ... test
}لا يمكن لدوال الاختبار إلقاء الأخطاء (قبل Xcode 16)
في إصدارات Xcode الأقدم، تنقل دوال الاختبار المُعلنة باستخدام throws الأخطاء على أنها إخفاقات في الاختبار عبر XCTAssertNoThrow.
func testDecode() throws {
let user = try JSONDecoder().decode(User.self, from: validJSON)
XCTAssertEqual(user.name, "Alice")
}إفشال اختبار صراحةً
استدعِ XCTFail("reason") لإجبار الاختبار على الفشل مع رسالة وصفية.
func testCallback() {
var called = false
service.doWork { called = true }
if !called { XCTFail("Callback was never invoked") }
}خطط الاختبار
تتيح لك خطط اختبار Xcode تشغيل الاختبارات نفسها باستخدام إعدادات مختلفة، مثل اللغة ومتغيرات البيئة وأدوات التحقق من المشكلات.
// File → New → Test Plan
// Add test targets and configure per-configuration env vars
// Useful for running localized UI tests or with Address Sanitizerالاختبار المتوازي
فعّل الاختبار المتوازي في إعدادات مخطط Xcode لتشغيل فئات الاختبار بالتزامن وتقليل إجمالي وقت الاختبار.
// Product → Scheme → Test → Options → Execute in parallel
// Each XCTestCase class runs in a separate process
// Ensure tests are independent and don't share global stateتحقق سريع
ما دالة XCTestCase التي تُشغّل مرة واحدة قبل جميع الاختبارات في الفئة، وليس قبل كل اختبار على حدة؟
مراجعة الدرس
تجاوز setUp/tearDown أو النسخ التي تُلقي الأخطاء للإعداد والتنظيف قبل كل اختبار. استخدم class setUp/tearDown للموارد التي تُنشأ مرة واحدة لكل فئة. سمِّ الاختبارات بوضوح. استخدم addTeardownBlock للتنظيف المباشر وXCTSkipIf للتخطي المشروط.
الأسئلة الشائعة
هل درس «إعداد XCTestCase والتنظيف وطرائق الاختبار» مجاني؟
نعم — نص درس «إعداد XCTestCase والتنظيف وطرائق الاختبار» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «إعداد XCTestCase والتنظيف وطرائق الاختبار»؟
نظّموا أصناف الاختبار باستخدام setUp وtearDown وسمّوا طرائق الاختبار. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «إعداد XCTestCase والتنظيف وطرائق الاختبار»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إعداد XCTestCase والتنظيف وطرائق الاختبار
- عائلة XCTAssert والتأكيدات التي تطلق الأخطاء
- المحاكاة المعتمدة على البروتوكولات وحقن التبعيات
- الاختبارات غير المتزامنة وقياس الأداء