vendredi 10 mars 2017

TDD avec Visual Studio 2017 Live Testing, NUnit et NFuent

Tout développeur ayant un mindset Software Craftsmanship adhère et pratique l'approche TDD (Test Driven Development) qui consiste à écrire les tests avant le code d'implémentation, TDD étant vu comme une activité de Design. l'objectif de cet article n'est pas de présenter cette pratique qui est déjà largement documentée mais de s'interesser à la nouvelle fonctionnalité Live Testing livrée avec Visual Studio 2017 et regarder comment la mettre en oeuvre avec quelque comparaisons avec NCrunch l'outil phare des développeurs TDD (http://www.ncrunch.net/)
Dans le cadre de cet article nous allons prendre pour exemple un kata bien connu, Roman Numeral, qui consiste  à  développer un convertisseur de nombres arabes en nombres romains.
Ci dessous la solution initialisée avec le code minimum pour convertir le chiffre 1 en "I".
La solution est affichée dans Visual Studio 2017, et utilise le couple NUnit / NFluent pour l'écriture des tests unitaires comme montré ci dessous:

Première étape: Démarre Live Testing, pour cela simplement ouvrir le menu Test et lancer la commande Live Testing / Start
On constate que rien ne se produit dans l'IDE et que le Test Explorer n'affiche pas le test dans la liste.
Ceci provient du fait que l'adapter pour NUnit n'est pas installé, d'ailleurs vous trouverez ci dessous la liste des adapters à installer en fonction des frameworks de tests unitaires que vous utilisez
  • Pour xUnit vous aurez besoin de xunit.runner.visualstudio version 2.2.0-beta3-build1187 et xunit 2.0 (minimum)
  • Pour NUnit vous aurez besoin de NUnit3TestAdapter version 3.5.1 et NUnit version 3.5.0 (minimum)
  • Pour MSTest vous aurez besoin de MSTest.TestAdapter 1.1.4-preview and MSTest.TestFramework 1.0.5-preview (minimum)

Dans notre cas nous allons récupére via Nuget l'adapter NUnit en tapant dans la console
Install-Package NUnit3TestAdapter -Version 3.5.1

Ci dessous la commande exécutée

Taper simplement Ctrl Shift B pour recompiler la solution, les tests apparaissent maintenant dans la fenêtre Test Explorer, on peut relancer la commande Live Unit Testing Start, on va voir apparaitre les symboles d'état des tests unitaires dans la marge nous permettant de constater que les test unitaires sont éxécutés avec Succès
Le principe de Live Testing est de donner un feedback temps réel au développeur sur le résultat des tests unitaires après toute modification de code, par exemple, si l'on change le return de la méthode de conversion, on verra immédiatemment les symboles changer en rouge, tel que montré ci dessous:
Après modification, un symbole horloge apparait signifiant que les tests unitaires sont en train d'être exécutés
dès que terminé, on voit le symbole Echec apparaitre en regard des lignes, on remarquera que l'outil affiche sous la forme de Tool tip le nombre de Test qui exercent une méthode donnée

Ci dessous la nomenclature des symboles utilisés par Live Unit Testing: 

 Si un ligne de code est couverte par des tests passés avec succès, affichage d'une coche verte
 Si un ligne de code n'est couverte par aucun test , affichage d'un trait bleu

Si un ligne de code est couverte par au moins un test en échec, affichage d'une croix rouge


Dans le cas de plusieurs tests exécutés sur une meme méthode, on aura en cliquant sur l'icone Live Testing en regard de la méthode, la liste des tests ainsi que le résultat:


Ce qu'il manque encore par rapport à NCrunch est la capacité à connaitre par exemple l'erreur sur l'assertion par simple mouse over sur l'icone rouge. Néanmoins ce début est très prometteur, et nous saluons le niveau de performance de l'outil.
Pour terminer, dans le cas de projets très volumineux, on a la possibilité d'arrêter Live Unit Testing afin de réduire la consammation de CPU qui peut être importante à partir du menu Test / Live Unit Testing - Stop

Aucun commentaire: