GherkinTesting

Publié le · Mis à jour le · 14 min

Wlad
Wlad
Fondateur & Tech Lead Swift

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 :

FormatExtensionUsage

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étriqueValeur

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, @But

  • Sources multiples : .file(), .inline()

  • Cucumber Expressions : {string}, {int}, {float}, {word}, {}, types custom

  • Regex 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 / @After avec portées .feature, .scenario, .step

  • Tags et filtrage par expressions booléennes

  • Step Libraries composables avec @StepLibrary

  • Reporters : HTML, Cucumber JSON, JUnit XML

  • Dry-run mode avec suggestions de steps

  • Compatibilité @MainActor / @GlobalActor

  • Swift 6 ready : async/await, Sendable, actors

  • Zéro dépendance externe

Sous le capot

  • Swift Macros — Transformation à la compilation, zéro overhead runtime

  • Swift 6 ready — Concurrency moderne, actors, Sendable

  • Protocol-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 :

OutilRôleStatus

GherkinTesting

Exécuter les tests BDD en Swift

Open-source

Gherkin Generator

Composer et exporter des .feature

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

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.…

GitHub