اختبار في Swift (iOS/macOS): الأطر والأدوات

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

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

ابدأ الدورة

اختبار في Swift (iOS/macOS): الأطر والأدوات



تطوير تطبيقات عالية الجودة لمنصات Apple لا يمكن أن يتم دون اختبار منهجي. في نظام Swift البيئي، توجد مجموعة قوية من الأدوات التي تغطي جميع المستويات - من اختبارات الوحدات إلى اختبارات واجهة المستخدم والتحليل الثابت. في هذه المقالة، سنستعرض الأطر والممارسات الرئيسية التي ستساعدك على تحسين موثوقية الكود وتسريع التطوير.



1. XCTest - أساس الاختبار

XCTest هو إطار عمل مدمج من Apple، متاح في Xcode. يوفر إمكانيات أساسية لكتابة اختبارات الوحدات واختبارات واجهة المستخدم واختبارات الأداء. XCTest متكامل مع Xcode Test Navigator ويدعم التشغيل على كل من المحاكيات والأجهزة الحقيقية.

مثال على اختبار وحدة بسيط لنموذج Calculator:

import XCTest@testable import MyApp

final class CalculatorTests: XCTestCase { var calculator: Calculator!

override func setUpWithError() throws { calculator = Calculator() }

override func tearDownWithError() throws { calculator = nil }

func testAddition() throws { let result = calculator.add(2, 3) XCTAssertEqual(result, 5, "يجب أن تكون عملية الجمع صحيحة") }

func testDivisionByZero() throws { XCTAssertThrowsError(try calculator.divide(10, 0)) { error in XCTAssertEqual(error as? CalculatorError, .divisionByZero) } }}

الإمكانيات الرئيسية لـ XCTest:

  • XCTAssert - مجموعة من التأكيدات (المساواة، الصحة، إلقاء الأخطاء)
  • setUp/tearDown - دورة حياة فئة الاختبار
  • measure - قياس أداء كتل الكود
  • اختبارات واجهة المستخدم - تسجيل وإعادة تشغيل التفاعلات مع الواجهة


2. Quick و Nimble - نمط BDD

Quick هو إطار عمل لتطوير السلوك (BDD) يسمح بوصف الاختبارات بلغة طبيعية. Nimble هي مكتبة مطابقات (matchers) توسع إمكانيات التأكيدات. معًا، يجعلان الاختبارات قابلة للقراءة من قبل الفريق بأكمله، بما في ذلك المدراء والمحللين.

مثال على اختبار باستخدام Quick/Nimble:

import Quickimport Nimble@testable import MyApp

class LoginSpec: QuickSpec { override func spec() { describe("LoginViewController") { var viewController: LoginViewController!

beforeEach { viewController = LoginViewController() _ = viewController.view // تحميل view }

context("عند إدخال بيانات صحيحة") { it("يجب استدعاء طريقة المصادقة") { viewController.emailTextField.text = "user@example.com" viewController.passwordTextField.text = "password123" viewController.loginButtonTapped() expect(viewController.isAuthorized).to(beTrue()) } }

context("عندما تكون كلمة المرور فارغة") { it("يجب عرض خطأ") { viewController.emailTextField.text = "user@example.com" viewController.passwordTextField.text = "" viewController.loginButtonTapped() expect(viewController.errorLabel.isHidden).to(beFalse()) } } } }}
  • describe/context/it - هيكل هرمي للمواصفات
  • beforeEach/afterEach - خطافات (hooks) لإعداد الحالة
  • expect(...).to(...) - فحوصات قابلة للقراءة مع العديد من المطابقات


3. SnapshotTesting - الاختبار البصري

مكتبة SnapshotTesting من Point-Free تسمح

توصيات