BDD sur Kotlin : Comment écrire des tests que même les managers comprendront

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

BDD sur Kotlin : Écrire des tests que lisent aussi bien les managers que les développeurs

\n\n

Avez-vous déjà montré un test unitaire à votre chef de produit ? Probablement pas. Parce que c'est comme montrer les plans d'un moteur à réaction à un pilote : utile, mais incompréhensible. Le Behaviour-Driven Development (BDD) sur Kotlin résout précisément ce problème : il transforme les assert's arides en scénarios vivants qui décrivent le comportement du système en langage humain.

\n\n

Dans cet article, nous allons voir comment implémenter le BDD sur Kotlin à l'aide de frameworks modernes — Kotest et Spek. Vous verrez comment écrire des tests dans le style Given-When-Then, qui sont à la fois une documentation et une vérification automatique. Et oui, même votre chef d'équipe sans préparation pourra les lire.

\n\n

Qu'est-ce que le BDD et en quoi diffère-t-il du TDD ?

\n\n

Beaucoup confondent TDD (Test-Driven Development) et BDD (Behaviour-Driven Development). La différence est simple :

\n\n
    \n
  • TDD — c'est « comment vais-je vérifier cette méthode ? »
  • \n
  • BDD — c'est « comment l'utilisateur va-t-il obtenir de la valeur de cette fonctionnalité ? »
  • \n
\n\n

Le Behaviour-driven development se concentre sur le comportement du système, et non sur les détails d'implémentation. Vous décrivez un scénario : dans des conditions données (Given), lorsqu'une action se produit (When), le système produit le résultat attendu (Then).

\n\n

Par exemple, au lieu d'écrire :
assertEquals(42, calculator.add(20, 22)),
vous écrivez :

\n\n
Given("j'ai une calculatrice") {\n    val calc = Calculator()\n    When("j'additionne 20 et 22") {\n        val result = calc.add(20, 22)\n        Then("le résultat doit être 42") {\n            result shouldBe 42\n        }\n    }\n}\n
\n\n

Reconnaissez que la deuxième version se lit comme une histoire, et non comme une instruction technique.

\n\n

Pourquoi Kotlin est idéal pour le BDD

\n\n

Kotlin est un langage qui, par lui-même, se prête à l'écriture de code lisible. Les fonctions d'extension, la notation infixe, les lambdas avec récepteur — tout cela rend les tests BDD sur Kotlin extrêmement naturels. Vous pouvez écrire shouldBe, shouldThrow et d'autres matchers qui ressemblent à de l'anglais.

\n\n

De plus, Kotlin prend en charge plusieurs paradigmes, ce qui permet d'utiliser différents frameworks pour le BDD. Examinons les deux plus populaires.

\n\n

Framework Kotest : BDD intégré

\n\n

Kotest (anciennement KotlinTest) est un puissant framework de test multiplateforme. Il prend en charge plusieurs styles, dont BehaviorSpec, qui est parfaitement adapté au BDD.

\n\n

Voici à quoi ressemble un scénario BDD complet sur Kotlin utilisant Kotest :

\n\n
import io.kotest.core.spec.style.BehaviorSpec\nimport io.kotest.matchers.shouldBe\n\nclass CartSpec : BehaviorSpec({\n    given("panier vide") {\n        val cart = ShoppingCart()\n        `when`("on ajoute un article au prix de 100") {\n            cart.addItem(Item("Livre", 100.0))\n            then("le panier doit contenir 1 article") {\n                cart.itemCount shouldBe 1\n            }\n            then("le montant total doit être de 100") {\n                cart.total shouldBe 100.0\n            }\n        }\n        `when`("on ajoute un article et on applique une réduction de 10%") {\n            cart.addItem(Item("Livre", 100.0))\n            cart.applyDiscount(10.0)\n            then("le montant final doit être de 90") {\n                cart.total shouldBe 90.0\n            }\n        }\n    }\n})\n
\n\n

Remarquez les guillemets inversés autour de when. C'est une particularité de Kotlin : when est un mot réservé, mais entre guillemets, il fonctionne comme un identifiant. Certains développeurs préfèrent utiliser When avec une majuscule.

\n\n

Spek : BDD structuré pour Kotlin

\n\n

Spek

Blogs

Book Recommendations