6.1. JBehave et Thucydides

JBehave est un framework BDD open source initialement écrit par Dan North, l’inventeur du BDD. Il est fortement intégré dans le monde JVM et largement utilisé par les équipes de développement en Java qui veulent implémenter les pratiques BDD dans leurs projets.

Avec JBehave, vous écrivez vos critères de recette en écrivant des histoires utilisateur et des scénarios en utilisant la notation BDD habituelle "étant "given-when-then" ("étant donné-quand-alors"), comme montré dans l’exemple suivant:

Scenario: Rechercher par mot clef et catégorie

Etant donné Sally qui veut acheter des timbres anciens pour son fils
Quand elle cherche des annonces dans la catégorie 'Anciens' contenant 'timbres'
Alors elle doit obtenir une liste d'annonces correspondant aux 'timbres'
      de la catégorie 'Anciens'

Les scénarii comme celui-là vont dans des fichiers .story: un fichier histoire est conçu pour contenir toues les scénarii (critères de recette) d’une histoire utilisateur donnée. Un fichier d’histoires peut également contenir une section descriptive au début qui donne des informations de contexte concernant les histoires testées:

De façon à trouver les éléments qui m'intéressent plus vite
En tant qu'acheteur
Je veux pouvoir obtenir la liste de toutes les annonces
   contenant un mot clef donné dans la description ou le titre

Scenario: Rechercher par mot clef et catégorie

Etant donné Sally qui veut acheter des timbres anciens pour son fils
Quand elle cherche des annonces dans la catégorie 'Anciens' contenant 'timbres'
Alors elle doit obtenir une liste d'annonces correspondant aux 'timbres'
   de la catégorie 'Anciens'

Scénario: Rechercher par mot clef et localisation

Etant donné Sally qui veut acheter un animal pour son fils
Quand elle cherche des annonces dans la catégorie Animaux de compagnie
   contenant animal Nouvelle-Galle du Sud
Alors elle doit obtenir une liste des annonces contenant le mot animal
   provenant d'annonceurs de Nouvelle-Galle du Sud.

Vous implémentez habituellement une histoire JBehave en utilisant des classes et des méthodes écrites en Java, en Groovy ou en Scala. Vous implémentez les étapes de l’histoire en utilisant des méthodes annotées pour représenter les étapes des scénarii textuels, comme montré dans l’exemple suivant:

public class SearchSteps {
    @Given("Sally wants to buy a $gift for her son")
    public void sally_wants_to_buy_a_gift(String gift) {
        // test code
    }

    @When("When she looks for ads in the $category category containing $keyword in $region")
    public void looking_for_an_ad(String category, String keyword, String region){
        // more test code
    }
}