Warum normale Tests nicht retten und was BDD ist
Jeder iOS-Entwickler kennt die Situation: Sie haben hundert Unit-Tests geschrieben, die Abdeckung beträgt 90 %, aber bei der nächsten Demo sagt der Manager: „Warum passiert nichts, wenn ich auf diesen Button klicke?“. Sie schauen in den Code – alles funktioniert. Das Problem ist, dass Unit-Tests den Code prüfen, nicht das Verhalten des Systems. Hier kommt BDD (Behaviour-Driven Development) ins Spiel – eine Methodik, die die Grenze zwischen „technischem“ Testen und „Geschäftslogik“ aufhebt.
BDD auf Swift ist nicht nur ein modischer Begriff. Es ist eine Möglichkeit, Tests so zu schreiben, dass sie nicht nur der Entwickler, sondern auch der Analyst, Tester oder sogar der Kunde lesen kann. In diesem Artikel werden wir uns ansehen, wie Sie Behaviour-Driven Development in Ihr iOS-Projekt integrieren können, indem Sie die Frameworks Quick und Nimble verwenden, und zeigen Live-Beispiele in Swift.
Was ist BDD in einfachen Worten
Stellen Sie sich vor, Sie schreiben keine Tests, sondern ein Drehbuch für einen Film. Im Drehbuch gibt es Akteure (Benutzer, System), Ereignisse (Button-Klick, Senden einer Anfrage) und ein erwartetes Ergebnis (Erscheinen eines Alerts, UI-Update). BDD ist genau so ein „Drehbuch“, nur für Ihre Anwendung.
Die Grundidee: Tests sollten das Verhalten des Systems aus Benutzersicht beschreiben. Statt „Methode saveUser() gibt true zurück“ schreiben Sie „Wenn der Benutzer eine korrekte E-Mail eingibt und auf 'Speichern' klickt, zeigt das System die Meldung 'Erfolgreich' an“.
Wie unterscheidet sich BDD von TDD
Viele verwechseln BDD mit TDD (Test-Driven Development). Der Unterschied ist einfach:
- TDD – wir schreiben einen Test, dann Code, dann Refactoring. Fokus auf Korrektheit der Implementierung.
- BDD – wir schreiben ein Verhaltensszenario, dann Code, der dieses Verhalten implementiert. Fokus auf den Wert für den Benutzer.
BDD ist eine Evolution von TDD. Wenn TDD die Frage beantwortet „Funktioniert der Code korrekt?“, dann BDD – „Macht der Code das, was das Geschäft braucht?“.
Werkzeuge für BDD auf Swift
In der Swift-Welt gibt es zwei Hauptsäulen für Behaviour-Driven Development:
- Quick – ein Framework zum Schreiben von Tests im BDD-Stil. Es ersetzt das standardmäßige XCTest und bietet die Syntax describe/context/it.
- Nimble – eine Bibliothek für „Matcher“ (Überprüfungen). Statt XCTAssertEqual schreiben Sie expect(value).to(equal(5)) – das liest sich wie ein englischer Satz.
Diese Werkzeuge arbeiten hervorragend zusammen und ermöglichen es, Tests zu schreiben, die wie eine Spezifikation aussehen.
Installation von Quick und Nimble über den Swift Package Manager
Fügen Sie die Abhängigkeiten in Ihre Package.swift oder über Xcode hinzu: File → Add Packages → geben Sie die URL des Quick-Repositorys ein: https://github.com/Quick/Quick.git und Nimble: https://github.com/Quick/Nimble.git.
Beispiel für Package.swift:
// swift-tools-version:5.9import PackageDescription
let package = Package( name: "MyApp", dependencies: [ .package(url: "https://github.com/Quick/Quick.git", from: "7.0.0"), .package(url: "https://github.com/Quick/Nimble.git", from: "13.0.0"), ], targets: [ .target(name: "MyApp"), .testTarget( name: "MyAppTests", dependencies: ["MyApp", "Quick", "Nimble"] ) ])Schreiben unseres ersten BDD-Tests auf Swift
Angenommen, wir haben einen einfachen LoginService, der Login und Passwort überprüft. Anstatt einen langweiligen XCTest zu schreiben, erstellen wir einen Test im BDD-Stil.
Code des Dienstes (für den Kontext)
class LoginService { func authenticate(username: String, password: String) -> Result<User, LoginError> { guard !username.isEmpty else { return .failure(.emptyUsername) } guard !password.isEmpty else { return .failure(.emptyPassword) } guard pas