samedi 29 janvier 2011

Cucumber, RSPEC :Comment une rondelle de concombre peut changer votre vie



Si Ruby on rails connait un succès croissant, c'est grace notamment à sa capacité à s'intégrer dans des démarches agiles de gestion de projet. Je connaissais pour la pratiquer (à ma façon) la méthode TDD : conduite du développement par les tests. Dans cette technique le développement du produit commence par la réalisation de tests (unitaires,d'intégration et fonctionnels) avant toutes choses. Le cadriciel Rails intègre nativement tout ce que vous avez besoin pour couvrir ces trois volets de test. Rails propose en plus l'utilisation des fixtures (garnitures) pour remplir ou manipuler les données de tests. le TDD propose des objets 'fictifs' mock ou stub afin de retarder le développement en 'dur' des objets.

J'ai souvent entendu parlé de RSPEC , un environnement de test offrant des techniques de développement basées sur le comportement de l'utilisateur (des histoires) : Behaviour DD (BDD).
La lecture de ce livre m'a ouvert des nouveaux horizons



Un fichier RSPEC (Ruby spécification) va décrire des évènements , des actions ou des états et comment le système doit réagir vis à vis de ces situations. RSPEC utilise un DSL (langage spécifique à un domaine) orienté développeur. Les RSPEC seront traduits en assertions de test.

 2 describe Game do
3 describe "#start" do
4 it "sends a welcome message" do
5 output = double('output')
6 game = Game.new(output)
7
8 output.should_receive(:puts).with('Welcome to Codebreaker!')
9
10 game.start
11 end
12
13 it "prompts for the first guess"
14 end


Ce livre consacre plusieurs chapitres à un projet appelé : cucumber (concombre). Cucumber est le projet qui réalise le rêve de tous les développeurs: il traduit les spécifications de votre client(sponsor-moa etc) en test de comportement (RSPEC :la synthèse des 3 types de test) .

Ici le DSL est orienté client (MOA). Le client va décrire avec ses mots des situations. Exemple:


Feature: code-breaker starts game

As a code-breaker
I want to start a game
So that I can break the code

Scenario: start game
Given I am not yet playing
When I start a new game
Then I should see "Welcome to Codebreaker!"
And I should see "Enter guess:"
Cucumber va traduire les termes :'given', 'when' 'then' en scénario de test de type RSPEC.
Ce DSL existe en version française.

(ressource: http://blog.octo.com/cucumber-pour-les-railers/)



Pour terminer, il convient de signaler que cucumber fonctionne avec watir et selenium qui sont deux outils complémentaires de test fonctionnel


(synthèse des composants: cliquer pour agrandir)



Il est plaisant de voir ces outils envahir le monde Java. C'est par ce moyen que Ruby
penetre dans les entreprises.

Aucun commentaire: