Choses à faire

24h dans une journée, et tant de choses à faire !

Easyb, Behavior Driven Development

publié le 2 mars 2010 par Killian Ebel

Pour rappel, le concept de Behavior Driven Development propose de se focaliser sur le comportement attendu de l’application plutôt que sur les tests. Ces comportements peuvent être décrits soit sous la forme de spécifications, soit sous la forme d’histoires !

Installation d’Easyb

Easyb est un outil permettant d’implémenter le BDD dans un projet Java, bien que le code à écrire pour rédiger vos spécifications sera du Groovy, dont la syntaxe est plus légère (plus agile) que Java. Il est comparable à l’outil specs en Scala ou encore RSpec en Ruby.

Pour l’intégrer à votre projet, vous disposez de multiples possibilités : ligne de commande, Ant, Maven ou encore l’intégration avec les IDE IntelliJ et Eclipse.

Il m’a été impossible d’installer le plugin Eclipse, l’adresse du plugin donnée sur le site officiel n’ayant plus l’air d’exister ! Je me suis donc penché sur la solution Maven. Créons donc le projet :

mvn archetype:create -DgroupId=fr.chosesafaire -DartifactId=easyb -Dpackagename=fr.chosesafaire

Editons le fichier de projet pom.xml pour y inclure Easyb, qui sera appelée lors de la phase test :

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<modelVersion>4.0.0</modelVersion>
<groupId>fr.chosesafaire</groupId>
<artifactId>easyb</artifactId>
<packaging>jar</packaging>
<name>easyb</name>
<version>0.0.1</version>
<description>Test de Easyb</description>
<url>http://www.chosesafaire.fr</url>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.easyb</groupId>
            <artifactId>maven-easyb-plugin</artifactId>
            <version>0.9.6</version>
            <executions>
                <execution>
                    <goals>
                        <goal>test</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.7</version>
        <scope>test</scope>
    </dependency>
</dependencies>

</project>

Nous développerons dans cet exemple une classe HelloMachine, qui n’a pour but que de renvoyer « Hello » et de stocker le fait d’avoir été appelée. Voici le scenario, à placer le fichier src/test/easby/HelloMachineStory.groovy, répertoire qui peut être facilement paramétré depuis le fichier Maven :

import fr.chosesafaire.HelloMachine

/**
 * Calling the HelloMachine !
 */
scenario "calling the hellomachine", {
    given "an hellomachine", {
        machine = new HelloMachine()
        hello = "Hello"
    }

    when "sayHello is called", {
        sayHello = machine.sayHello()
    }

    then "hello should be returned", {
        sayHello.shouldBe hello
    }

    and "then the machine should have been called", {
        machine.isCalled().shouldBe true
    }
}

Et enfin notre classe métier :

package fr.chosesafaire;

public class HelloMachine {
    private Boolean called = Boolean.FALSE;

    public String sayHello() {
        called = Boolean.TRUE;
        return "Hello";
    }

    public Boolean isCalled() {
        return called;
    }
}

Il ne reste qu’à lancer la compilation et les tests :

mvn compile test

Si vous n’avez pas Groovy d’installé, Maven le fera pour vous, car c’est une dépendance d’Easyb. Le résultat dans la console devrait être le suivant (bien qu’il soit possible de générer des rapports HTML !) :

[java] Running hello machine story (HelloMachineStory.groovy)
[java] Scenarios run: 1, Failures: 0, Pending: 0, Time Elapsed: 0.313 sec
[java] 1 behavior run with no failures

Ceci n’est qu’une brève introduction, j’espère que vous comprendrez l’intérêt d’un tel outil en étudiant plus en détail les fonctionnalités ! Voici une liste de liens utiles :

Les textes, illustrations et démonstrations présents sur ce site sont la propriété de leurs auteurs respectifs, sauf mention contraire (photo de la bannière).
Chosesafaire.fr, un site propulsé par Wordpress, vous est proposé par Pierre Quillery & Killian Ebel.

Valid XHTML 1.0 Strict