Accueil Nos publications Blog BDD avec StoryQ

BDD avec StoryQ

Il existe de nombreux outils permettant de faire de la BDD (Behavior Driven
Development) dans le monde Java, mais beaucoup moins du côté .Net, c’est pourquoi je vais aujourd’hui vous présenter StoryQ.

StoryQ est à l’origine un projet CodePlex qui a commencé en Juillet 2010. Son objectif est simple, permettre de faire du BDD dans un environnement .Net.

Pour ceux qui ignorent ce qu’est le Behavior Driven Development, je vous invite à consulter ces différents liens:

StoryQ en action

En deux mots, le BDD est donc une nouvelle forme d’écriture des tests unitaires, ce pour quoi Visual Studio est très bien équipé ! StoryQ nous offre une nouvelle syntaxe pour écrire ces tests. Voici donc un scénario exemple pour illustrer l’utilisation de StoryQ :
Main dans la main avec notre client, nous sommes parvenus à écrire un certain nombre de scénarios pour décrire les comportements attendus de notre nouvelle application d’eCommerce dont voici le premier.

Dans l’histoire de eCommerce
Pour Faire mes courses
En tant qu’Utilisateur
Je veux que tous les produits que je choisis soient présents dans le panier
Lors du scénario Ajouter un produit au panier
Etant donné que j’ai un produit dans mon panier
Quand Je clique sur le bouton Ajouter l’article au panier
Et que le navigateur rafraîchit la page
Alors le panier devrait contenir deux articles

On obtient en C#


using StoryQ;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace StoryQ.Demo
{
[TestClass]
public class DemoTest
{

[TestMethod]
public void ExempleValide()
{
new Story("eCommerce").Tag("sprint 1")
.InOrderTo("Faire mes courses")
.AsA("Utilisateur")
.IWant("Tous les produits que j'ai choisi soient présent dans le panier")
.WithScenario("Ajouter un produit au panier")
.Given(IlYAUnProduitDansLePanier)
.When(JeCliqueSurleBouton, "AjouterAuPanier")
.And(NavigateurRafraichit)
.Then(PanierADeuxItems, true)

.ExecuteWithReport(MethodBase.GetCurrentMethod());
}

On remarquera tout d’abord les attributs de Test, communs aux tests unitaires classiques au sein de Visual Studio. Ensuite, mis à part le mélange d’anglais et de français dans le cas de cet exemple, je vous invite à comparer l’histoire en simple texte et la syntaxe pour le représenter qui sont quasiment identiques.

La syntaxe de StoryQ se base sur un simple DSL (Domain Specific Language ou langage dédié), ce qui le rend facilement traduisible pour éviter le mélange de langues. Je vous invite à consulter la page CodePlex de StoryQ pour plus d’informations.

Dans un premier temps, la traduction du texte en code peut s’avérer laborieuse, ainsi il existe un outil nommé Converter GUI pour traduire le texte en code automatiquement.

Comme vous pouvez le remarquer, on obtient un test clair qui identifie facilement le comportement attendu de l’application. Il ne reste plus qu’à créer les méthodes IlYAUnProduitDansLePanierJeCliqueSurleBouton et PanierADeuxItems. Ces noms de délégués ont été créés automatiquement depuis l’histoire, ce qui nous pousse à bien définir les conditions du scénario. En effet, de mauvais noms de méthodes (j’entends par là peu clairs par exemple) nous permettront d’identifier rapidement un manque de clarté dans le scénario.

Une fois les tests écrits, il ne reste plus qu’à les exécuter et générer le rapport de test comme on le ferait avec n’importe quel test MSTest.

Pour résumer

StoryQ permet facilement de faire du BDD dans un environnement .Net tout en encourageant les bonnes pratiques, notamment celles de nommage. Nous sommes donc en mesure de créer avec StoryQ des tests unitaires vraiment parlant, pouvant même, pourquoi pas, servir de base de documentation technique.

Quelques liens