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

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

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

ابدأ الدورة

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



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



1. XCTest — الإطار القياسي من Apple



XCTest مدمج في Xcode وهو الأداة الرئيسية لكتابة اختبارات الوحدة وواجهة المستخدم. يدعم الاختبار غير المتزامن، والأداء، والتكامل مع CI/CD.



مثال لاختبار وحدة:

import XCTest@testable import MyApp

final class CalculatorTests: XCTestCase { var calculator: Calculator!

override func setUp() { super.setUp() calculator = Calculator() }

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

func testAsyncOperation() { let expectation = XCTestExpectation(description: "عملية غير متزامنة") calculator.fetchRemoteValue { value in XCTAssertGreaterThan(value, 0) expectation.fulfill() } wait(for: [expectation], timeout: 5.0) }}


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

  • التأكيدات: XCTAssertEqual، XCTAssertNil، XCTAssertThrowsError
  • قياس الأداء عبر measure
  • اختبار واجهة المستخدم باستخدام XCUIApplication و XCUIElement
  • دعم التشغيل المتوازي للاختبارات


2. Quick + Nimble — نهج BDD



Quick هو إطار BDD يسمح بكتابة الاختبارات بأسلوب "Given-When-Then". Nimble هو رفيقه، ويوفر مطابقات تعبيرية.



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

import Quickimport Nimble

class UserSpec: QuickSpec { override func spec() { describe("نموذج المستخدم") { var user: User!

beforeEach { user = User(name: "أليس", age: 30) }

context("عندما يكون العمر صالحًا") { it("يجب أن يكون بالغًا") { expect(user.isAdult).to(beTrue()) } }

context("عند تحديث الاسم") { it("يغير الاسم بشكل صحيح") { user.updateName("بوب") expect(user.name) == "بوب" } } } }}


المزايا:

  • اختبارات قابلة للقراءة، مفهومة لغير المبرمجين
  • مطابقات مرنة: beCloseTo()، contain()، throwError()
  • دعم عدم التزامن عبر toEventually()


3. XCUITest — اختبار واجهة المستخدم



لاختبار واجهة المستخدم، يتم استخدام XCUITest. يحاكي إجراءات المستخدم: النقر، السحب، إدخال النص.



مثال لاختبار واجهة مستخدم لنظام iOS:

import XCTest

class LoginUITests: XCTestCase { let app = XCUIApplication()

override func setUp() { continueAfterFailure = false app.launch() }

func testSuccessfulLogin() { let usernameField = app.textFields["username"] usernameField.tap() usernameField.typeText("testuser")

let passwordField = app.secureTextFields["password"] passwordField.tap() passwordField.typeText("password123")

app.buttons["Login"].tap() XCTAssertTrue(app.staticTexts["Welcome"].exists) }}


توصيات