décembre
2009
Je poursuis mon exploration des différentes possiblités de faire du Behavior Driven Development sur plate-forme .NET. Après avoir examiné l’approche NBehave, je vais voir comment utiliser plus directement Cucumber (une des principales références en BDD, avec une communauté très active). Cucumber étant programmé en Ruby, on peut donc utiliser IronRuby, l’implémentation de Ruby pour .NET. Dans ce billet je décris l’installation de IronRuby, celle de Cucumber sous IronRuby, et je montrerai l’exécution de mon exemple prédécent dans ce nouvel environnement. Faire tourner Cucumber sous IronRuby a été un peu laborieux pour moi, donc j’essaierai très prochainement une autre approche, celle de Cuke4Nuke – Cucumber for .NET qui promet d’être plus directe.
Installer IronRuby
- télécharger IronRuby depuis la page du projet. Dans mon cas j’ai pris la version 0.9.3 sur cette page. Attention, ne pas prendre le fichier .MSI, cet installateur installe obligatoirement IronRuby dans C:\Program Files, et j’ai découvert péniblement que l’installation de Cucumber ne tolère pas bien les espaces dans les noms de chemins ! Donc prenez bien le fichier .ZIP, que vous allez extraire dans par exemple C:\ironruby.
- insérer C:\ironruby\bin dans la variable d’environnement système PATH de Windows. Cela peut être l’occasion de télécharger l’excellent utilitaire RapidEE qui offre un accès bien plus pratique à ces variables.
- lancer une fenêtre de commande DOS (ou mieux PowerShell), taper « ir », et vérifier que l’on obtient bien le prompt IronRuby comme ci-dessous
Vous pouvez alors vérifier que vous êtes réellement dans le monde .NET. Voici par exemple le chargement puis l’utilisation de la classe Game développée à l’occasion des billets précédents :
Magique, non ? J’ai trouvé comment faire le chargement de l’assembly .NET grâce à cette vidéo Using Cucumber to test CLR assembly.
Faire tourner Cucumber sous IronRuby
Cette partie a été la plus laborieuse pour moi. Je me suis inspiré des différents articles cités en référence plus bas. Voici comment j’ai procédé.
Dans la fenêtre de commandes, taper « igem install -bindir c:\ironruby\bin cucumber rspec », cela devrait donner quelque chose comme :
à chaque fois j’ai eu des erreurs relatives à la documentation comme ci-dessus, mais elles ne paraissent pas bloquantes. Pour éviter ces erreurs et gagner du temps sur l’installation, on peut éventuellement utilise les options « –no-rdoc –no-ri » sur la ligne de commandes.
Ensuite il faut créer les fichiers icucumber.bat et icucumber comme indiqué ci-dessous (image tirée de cette page) :
On peut alors vérifier que tout cela fonctionne en tapant « icucumber -help ».
Tester le jeu
Dans un dossier pendu\features, j’ai créé trois fichiers textes :
qui contiennent mes scénarios (je n’ai pas pu garder un seul fichier comme précédemment, cela n’a pas l’air bien supporté par (i)cucumber contrairement à NBehave).
Le dossier steps_definitions contiendra le fichier pendu_steps.rb qui me servira à réaliser le pont (en Ruby) vers ma classe C#.
La première exécution de icucumber me propose un modèle pour les fragments de code qui font faire le pont, c’est l’une des caractéristiques bien sympathiques de Cucumber :
On voit que le modèle comporte des expressions régulières, il suffit de les affiner un peu, d’appeler le code C# avec les arguments que l’on extrait des expressions régulières, et de faire les vérifications nécessaires dans les parties « Then ».
Voici le fichier pendu_steps.rb, réalisé à partir des fragments suggérés ci-dessus :
Ma principale difficulté a été d’arriver à séparer la chaîne letters en caractères individuels. En effet letters.each rend la chaîne elle-même, et curieusement, aucune erreur ne se produit quand on affecte une chaîne à game.ProposedLetter, qui est pourtant définie de la manière suivante :
private char proposedLetter;
public char ProposedLetter
{
set
{
proposedLetter = value;
ComputeResult();
}
}
Le test ci-dessous montre que seule la première lettre de la chaîne est bien prise en compte.
Donc voilà sans doute une première subtilité de l’interopérabilité de IronRuby et de C#, probablement normale, mais qui m’a un peu dérouté.
Cette petite difficulté résolue grâce à la méthode « split », voici le résultat de l’exécution de icucumber :
Tout fonctionne bien, ca valait le coup de persévérer ! Seul l’affichage en couleur n’est pas au point, d’où l’option -no-color.
En conclusion, arriver à faire marcher cet exemple a été un peu laborieuse pour moi, surtout pour faire tourner Cucumber sous IronRuby. Toutefois IronRuby a l’air d’être un projet très actif, et s’approche d’une version officielle 1.0. Il est donc probable que les quelques difficultés rencontrées vont bientôt disparaître.
Références
- Installing Cucumber with IronRuby 0.9.2
- On running Cucumber under IronRuby 0.9, de Thomas Lundström.
- How-to: Use Cucumber with .NET and C# under IronRuby, de Rupak Ganguly.
Commentaires récents
- Des tableaux pour l’intégration d’un équipier dans une équipe Scrum dans
- Rétrospectives, la directive première dans
- Des tableaux pour l’intégration d’un équipier dans une équipe Scrum dans
- Des tableaux pour l’intégration d’un équipier dans une équipe Scrum dans
- Des tableaux pour l’intégration d’un équipier dans une équipe Scrum dans