Tests unitaires xUnit avec Visual Studio Team Services de projets DNX
Introduction
Avec DNX qui va bientôt passer en version finale vous allez être de plus en plus nombreux à vouloir effectuer des tests unitaires afin de vous assurer de la qualité des développements effectués.
Idéalement ces tests seront exécutés dans un processus d’intégration continue afin de s’assurer qu’il n’y a pas eu de régressions techniques, fonctionnelles et/ou de performance.
Dans le monde du .NET il existe historiquement plusieurs outils pour mettre en place cela :
MSTest/VSTest
Nunit
xUnit
…
(une liste non exhaustive https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.23 )
Dans notre cas nous avions fait le choix d’utiliser xUnit car en plus d’être largement utilisé et supporté par la communauté, c’est l’un des rares à supporter DNX.
Autre chose, vous avez dû le remarquer au travers de mes billets précédents, nous utilisons massivement l’industrie logicielle fournie par Visual Studio Team Services (VSO) avec notamment le build2015 et le release management.
Pour rappel DNX = « nouveau framework » ce qui veut dire que l’outillage doit être adapté et recompilé pour le supporter correctement.
Tests locaux et projet de tests
Après avoir suivi ce tutoriel, il nous a été possible d’écrire des tests dans un projet de librairie dnx (qui donne un nuget à la fin) et d’exécuter ces tests en local via la console (dnx test) ou bien via le test explorer.
https://asp.net-hacker.rocks/2015/12/15/unit-testing-dnx-libraries-with-xunit.html
https://xunit.github.io/docs/getting-started-dnx.html
Note vous pouvez aussi utiliser yeoman pour générer le projet de tests en tapant yo aspnet et en sélectionnant l’entrée correspondant aux tests.
Maintenant la question est la suivante : comment faire pour que VSO/VSTS exécute et rapatrie le résultat de ces tests dans les informations de build/test ?
Exécution des tests dans l’agent
La première étape c’est de demander à l’agent VSO d’exécuter les tests, pour cela rien de plus facile, il suffit d’exécuter un script powerhell.
dnx -p “.\src\BizDesk365ContentService.Tests" test -xml TestResults.xml
Le premier paramètre est le chemin relatif de mon projet de tests. Le second demande au runner dnx de xunit de produire les résultats dans un fichier xml dont nous auront besoin plus tard.
Dans mon exemple ici j’ai rajouté des lignes qui me permettent de m’assurer que dnvm, mon runtime et dnx sont bien là, mais selon votre configuration ce n’est pas forcément obligatoire.
https://gist.github.com/baywet/4daabc875cab427ef1bc
Récupération des résultats de tests
Maintenant il faut indiquer à VSTS de récupérer les résultats de tests et de les interpréter, pour cela ajouter une étape publish test results
Dans le type sélectionner xunit et indiquer l’emplacement de votre fichier de résultat.
Conclusion
Les résultats de tests remontent avec notre build dans VSTS et on peut voir qu’avec un peu de configuration et de scripts il est facile d’automatiser les tests unitaires pour des projets DNX.
Bons tests !