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

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

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

ابدأ الدورة

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



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



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



XCTest هو الأساس لجميع الاختبارات في Xcode. إنه مدمج في بيئة التطوير المتكاملة (IDE)، ويدعم التشغيل المتوازي، وقياس الأداء، واختبار واجهة المستخدم. لإنشاء اختبار، يكفي أن ترث فئة من XCTestCase.



مثال على اختبار وحدة باستخدام XCTest



import XCTest@testable import MyApp

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 testDivisionByZero() { XCTAssertThrowsError(try calculator.divide(10, 0)) { error in XCTAssertEqual(error as? CalculatorError, CalculatorError.divisionByZero) } }

func testPerformanceExample() { measure { for _ in 0..<1000 { _ = calculator.add(Int.random(in: 0...100), Int.random(in: 0...100)) } } }}


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

  • XCTAssertEqual، XCTAssertTrue، XCTAssertNil — تحققّات أساسية.
  • XCTAssertThrowsError — اختبار الاستثناءات.
  • measure — قياس الأداء.
  • دعم الاختبارات غير المتزامنة عبر XCTestExpectation.


2. Quick و Nimble — أسلوب اختبار BDD



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



مثال باستخدام Quick + Nimble



import Quickimport Nimble@testable import MyApp

class CalculatorSpec: QuickSpec { override func spec() { describe("Calculator") { var calculator: Calculator!

beforeEach { calculator = Calculator() }

context("when adding two numbers") { it("should return the correct sum") { expect(calculator.add(2, 3)).to(equal(5)) } }

context("when dividing by zero") { it("should throw an error") { expect { try calculator.divide(10, 0) }.to(throwError()) } }

context("performance") { it("should be fast") { expect { for _ in 0..<1000 { _ = calculator.add(Int.random(in: 0...100), Int.random(in: 0...100)) } }.to(beLessThan(0.1)) } } } }}


المزايا:

  • تسلسلات هرمية قابلة للقراءة: describe ← context ← it.
  • توفر Nimble مجموعة غنية من المطابقات: equal، beNil، beCloseTo، contain وغيرها.
  • تكامل ممتاز مع Xcode والتقارير.


3. SwiftCheck — اختبار قائم على الخصائص



توصيات