Testen in Swift (iOS/macOS): Frameworks und Werkzeuge

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Testen in Swift (iOS/macOS): Frameworks und Werkzeuge



Die Entwicklung qualitativ hochwertiger Anwendungen für Apple-Plattformen ist ohne zuverlässiges Testen undenkbar. Das Swift-Ökosystem bietet sowohl integrierte Lösungen als auch leistungsstarke Drittanbieter-Frameworks, die alle Ebenen abdecken: von Modultests bis hin zu UI-Tests. In diesem Artikel werden wir die wichtigsten Testwerkzeuge für iOS/macOS im Detail analysieren, ihre Stärken aufzeigen und praktische Beispiele in Swift geben.



1. XCTest – Das Standard-Framework von Apple



XCTest ist die Grundlage für alle Tests in Xcode. Es ist in die IDE integriert, unterstützt parallele Ausführung, Leistungsmessung und UI-Tests. Um einen Test zu erstellen, reicht es aus, eine Klasse von XCTestCase abzuleiten.



Beispiel eines Modultests mit 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, "Erwartet 5, erhalten \\(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)) } } }}


Wichtige Funktionen von XCTest:

  • XCTAssertEqual, XCTAssertTrue, XCTAssertNil – grundlegende Prüfungen.
  • XCTAssertThrowsError – Testen von Ausnahmen.
  • measure – Leistungsmessung.
  • Unterstützung für asynchrone Tests mittels XCTestExpectation.


2. Quick und Nimble – BDD-Teststil



Quick ist ein Framework zum Schreiben von Tests im Behaviour-Driven Development (BDD)-Stil. Es ermöglicht die Beschreibung des Anwendungsverhaltens in natürlicher Sprache. Nimble ist eine Matcher-Bibliothek, die Assertions lesbarer macht.



Beispiel mit 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)) } } } }}


Vorteile:

  • Lesbare Hierarchien: describe → context → it.
  • Nimble bietet eine umfangreiche Sammlung von Matchern: equal, beNil, beCloseTo, contain u.a.
  • Hervorragende Integration mit Xcode und Berichten.


3. SwiftCheck – Property-basiertes Testen



Empfehlungen