décembre
2009
Pour conclure mon exploration des moyens de pratiquer le BDD en .NET, il me restait à examiner Cuke4Nuke, l’équivalent de Cuke4Duke de Java. C’est chose faite, et ce billet montre comment installer tout ce qu’il faut pour arriver à faire tourner l’exemple du jeu du pendu qui m’a servi dans les billets précédents.
J’ai suivi les instructions de cette page How to Install Cuke4Nuke :
Par contre j’avais Ruby 1.9, cela n’a pas fonctionné (étape 6, installation de cuke4nuke) :
donc il faut bien partir sur Ruby 1.8.6. Problème, la page How to Install Cuke4Nuke m’a pointé sur le téléchargement d’un installateur ruby186-26.exe, sur lequel Cuke4Nuke ne s’installe pas bien du tout, apparemment parce que RubyGems ne fonctionne pas bien dans cette version 186-26. Après une bonne heure passée à chercher des informations sur des messages cryptiques, un forum m’a fait découvrir un installeur ruby186-27_rc2.exe sur cette page. Eh bien les instructions d’installation ne fonctionnent qu’avec cette version !
Ensuite j’ai suivi les explications « How to use it » sur la page How to Install Cuke4Nuke, mais j’ai encore eu quelques ennuis d’installation. A l’exécution, cuke4nuke ne reconnaissait pas le fichier .wire qui fait le lien avec .NET, ce que j’ai fini par découvrir grâce à l’option -v (pour verbose) :
J’en ai déduit que cela indique qu’il manque ‘ »json », à installer de la manière suivante :
Et j’ai eu de la chance, car ensuite Cuke4Nuke a fonctionné comme attendu :
Bien sûr j’ai dû réaliser un pont spécifique, avec le code ci-dessous dans ma solution :
using Cuke4Nuke.Framework; using NUnit.Framework; namespace PenduAvecCuke { public class Scenarios { private Game game; [Given(@"^the secret word (.*) and the remaining count (\d+)$")] public void InitializeGame(string secret, int remaining) { game = new Game(secret, remaining); } [Given(@"^the user has already proposed the letters (.*)$")] public void ProposeLetters(string letters) { foreach (char c in letters) { game.ProposedLetter = c; } } [When(@"^the user proposes the letter (.*)$")] public void ProposeLetter(char letter) { game.ProposedLetter = letter; } [Then(@"the game displays (.*) and the remaining count is (\d+)$")] public void DisplayResult(string display, int remaining) { Assert.That(game.DisplayedWord, Is.EqualTo(display)); Assert.That(game.Remaining, Is.EqualTo(remaining)); } }
C’est donc très similaire à la classe équivalente dans mon exemple avec NBehave.
La grande différence, si j’ai bien tout suivi, c’est que dans le cas de Cuke4Nuke, Cucumber (sous Ruby 1.8) tourne de manière cachée, vous permettant de l’utiliser sans écrire une seule ligne de Ruby. Cuke4Nuke sert en fait d’intermédiaire entre Cucumber/Ruby et la DLL .NET, en reroutant les appels de Cucumber vers la DLL.
Dans le cas de NBehave, c’est NBehave qui fait tout, et Ruby n’est pas du tout impliqué.
En conclusion, pas mal de difficultés d’installation liées à la version de Ruby, et des instructions incomplètes. C’est surement facilement surmontable pour quelqu’un qui connaît bien Ruby, mais ce n’est pas mon cas et cela m’a couté environ 4 heures de travail juste pour arriver au bout de cet exemple.
Comme j’ai passé ces derniers jours le nez collé à la fenêtre de commandes, j’ai du mal à prendre du recul, et à donner autre chose que des impressions. A première vue, je ne saisis pas trop l’intérêt de toute la machinerie Cuke4Nuke, disons par rapport à la simplicité d’une approche native comme NBehave. Si le but c’est de quand même faire du Ruby dans un contexte .NET, alors autant passer en Cucumber sous IronRuby ? En tout cas vous avez le choix, tout fonctionne.
Et sinon, si l’on veut se focaliser sur la maîtrise du BDD, ca vaut probablement le coup de travailler directement en Cucumber sous Ruby, au moins le temps de bien maîtriser les concepts.
Et vous, qu’en pensez-vous ?
4 Commentaires + Ajouter un commentaire
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
eh bien ca ne prend guère plus de temps de noter et publier le chemin suivi, ca sert de journal personnel (où donc ai-je passé tout ce temps…), ca fait gagner du temps à d’autres… autant de bonnes raisons d’en faire un blog !
Bruno
… si j’avais écrit un article à chaque fois que j’ai passé deux heures sur un problème idiot, pour l’install d’un logiciel ou une configuration quelconque, je pourrais éditer une encyclopédie !
Si au moins j’avais pris le temps d’en faire un blog, cela aurait peut-être servi à d’autres ?
Merci à vous en tout cas …
Cool, tiens nous au courant si les instructions ci-dessus marchent (ou pas) pour toi.
Bruno
Merci beaucoup pour cet article.
Je suis actuellement en train d’expérimenter le BDD et notamment Cucumber. Le moment venu de faire une démo incluant .Net je vais gagner pas mal de temps avec ce tutoriel.