GherkinTesting
Publié le · Mis à jour le · 14 min
Le vide dans l'écosystème Swift
Le BDD (Behavior-Driven Development) est un standard dans l'industrie. Ruby a Cucumber, Python a Behave, .NET a SpecFlow. Et Swift ?
XCTest-Gherkin — Vieux, mal maintenu, API datée.
CucumberSwift — Objective-C sous le capot, fuites mémoire, performances catastrophiques.
Quick/Nimble — Pas vraiment du Gherkin, juste du describe/it.
Résultat : les équipes iOS qui veulent faire du BDD galèrent. Elles bricolent des solutions partielles, importent des frameworks bancals, ou abandonnent tout simplement.
GherkinTesting change ça. Un vrai framework BDD moderne, construit avec les Swift Macros, compatible Swift Testing, pensé pour les équipes de 2025.
L'approche : Swift Macros natives
Pas de parsing runtime, pas de reflection, pas de magie noire. GherkinTesting utilise les Swift Macros pour transformer vos types en suites de tests à la compilation.
La macro @Feature transforme cette struct en suite de tests. Chaque scénario du fichier .feature est exécuté en utilisant les steps définis par @Given, @When, @Then.
Sources multiples
Chargez vos features depuis plusieurs sources :
Cucumber Expressions
Les Cucumber Expressions offrent une alternative lisible aux regex. Le framework supporte les types natifs et les types custom :
Types custom
Définissez vos propres types de paramètres dans gherkinConfiguration :
Data Tables
Les Data Tables permettent de passer des données tabulaires à un step :
L'API DataTable expose headers, dataRows, asDictionaries et empty pour manipuler les données.
Doc Strings
Les Doc Strings permettent de passer du contenu multiligne, avec un media type optionnel :
Captures mixtes + DataTable
Un step peut combiner des paramètres Cucumber Expression et une DataTable :
Scenario Outlines avec Examples
Les Scenario Outlines permettent de tester le même scénario avec différentes données. Les tags sur les blocs Examples: offrent un filtrage granulaire :
Multi-langue natif
Gherkin supporte 70+ langues. Vos fichiers .feature peuvent être en français, anglais, allemand, japonais... Il suffit d'ajouter la directive # language: en première ligne :
Les définitions de steps restent en Swift — seuls les fichiers .feature changent de langue.
Hooks : lifecycle complet
Contrôlez le cycle de vie de vos tests avec @Before et @After à différentes portées :
Les hooks supportent les paramètres order: pour contrôler l'ordre d'exécution et tags: pour un déclenchement conditionnel :
Portées disponibles : .feature, .scenario, .step. Les @Before s'exécutent en FIFO, les @After en LIFO.
Tags et filtrage
Organisez et filtrez vos tests avec des expressions booléennes :
Expressions supportées : @tag, not @tag, @a and @b, @a or @b, parenthèses. Les scénarios filtrés apparaissent comme .skipped dans les rapports.
Steps partagés
Réutilisez des steps entre features avec @StepLibrary :
Chaque library est instanciée fraîchement par scénario via retyped() pour garantir l'isolation de l'état.
Rule (Gherkin 6+)
Le mot-clé Rule: permet de grouper des scénarios sous une contrainte métier :
Les scénarios dans une Rule héritent du Background de la feature.
Reporters : formats standards
Générez des rapports compatibles avec tous les outils CI/CD via le paramètre reports: de @Feature :
Trois formats disponibles :
| Format | Extension | Usage |
|---|---|---|
HTML | .html | Rapport visuel navigable |
Cucumber JSON | .json | Compatible avec les dashboards Cucumber |
JUnit XML | .xml | GitHub Actions, Jenkins, Azure DevOps |
Les rapports sont écrits automatiquement dans /tmp/swift-gherkin-testing/reports/ après exécution des tests. Vous pouvez personnaliser le chemin :
Dry-run mode
Vérifiez que tous vos steps sont implémentés sans exécuter les tests :
En mode dry-run, le framework inspecte les scénarios et génère des StepSuggestion pour chaque step non implémenté, avec l'expression Cucumber et la signature Swift suggérées.
Compatibilité @MainActor et @GlobalActor
Le framework est entièrement compatible avec les global actors de Swift. Vous pouvez annoter vos features, step handlers ou step libraries :
Fonctionne aussi avec des @GlobalActor custom et des appels cross-isolation via await.
Installation
Prérequis
Swift 6.2+ (Xcode 26.2 ou ultérieur)
Plateformes : iOS 17+ · macOS 14+ · tvOS 17+ · watchOS 10+ · visionOS 1+ · Mac Catalyst 17+
Swift Package Manager
Puis ajoutez la dépendance à votre cible de tests :
CI / GitHub Actions
Le framework s'intègre nativement avec les pipelines CI. Un workflow minimal :
Ajoutez la collecte des rapports JUnit XML en artifact :
En chiffres
| Métrique | Valeur |
|---|---|
Tests | 823+ |
Couverture | 97.59% |
Langues Gherkin | 70+ |
Formats de rapport | 3 (HTML, JSON, JUnit XML) |
Dépendances externes | 0 |
Plateformes supportées | 6 (iOS, macOS, tvOS, watchOS, visionOS, Mac Catalyst) |
Fonctionnalités
Macros
@Feature,@Given,@When,@Then,@And,@ButSources multiples :
.file(),.inline()Cucumber Expressions :
{string},{int},{float},{word},{}, types customRegex patterns en alternative aux Cucumber Expressions
Data Tables avec API complète (
headers,dataRows,asDictionaries)Doc Strings avec media type optionnel
Captures mixtes + DataTable / DocString
Scenario Outlines avec Examples et tags sur les blocs Examples
Rule (Gherkin 6+) pour le regroupement métier
Background pour les étapes communes
Multi-langue natif (70+ langues Gherkin)
Hooks
@Before/@Afteravec portées.feature,.scenario,.stepTags et filtrage par expressions booléennes
Step Libraries composables avec
@StepLibraryReporters : HTML, Cucumber JSON, JUnit XML
Dry-run mode avec suggestions de steps
Compatibilité
@MainActor/@GlobalActorSwift 6 ready :
async/await,Sendable, actorsZéro dépendance externe
Sous le capot
Swift Macros — Transformation à la compilation, zéro overhead runtime
Swift 6 ready — Concurrency moderne, actors,
SendableProtocol-oriented — Extensible, testable, mockable
Zero dependencies — Que du Swift et frameworks Apple
Multi-platform — iOS, macOS, tvOS, watchOS, visionOS, Mac Catalyst
Écosystème Gherkin Atelier Socle
GherkinTesting fait partie d'un ensemble d'outils complémentaires :
| Outil | Rôle | Status |
|---|---|---|
GherkinTesting | Exécuter les tests BDD en Swift | Open-source |
Gherkin Generator | Composer et exporter des | En développement |
Gherkin Runner | Interface macOS pour éditer et exécuter | En développement |
Trois outils, un workflow BDD complet en Swift.
Liens
GitHub - atelier-socle/swift-gherkin-testing: A native BDD testing framework for Swift. Execute Gherkin .feature files as Swift Testing tests using Swift Macros. No external runtime dependencies. Gherkin v6+ syntax with Cucumber Expressions, 70+ languages, and built-in reporters
A native BDD testing framework for Swift. Execute Gherkin .feature files as Swift Testing tests using Swift Macros. No external runtime dependencies.…