Du nouveau dans MSTest

Le framework de test de Microsoft n’a pas bénéficié de beaucoup de nouveautés ces derniers temps et de fait, il est souvent délaissé pour des outils concurrents plus évolués grâce à certaines fonctionnalités.

Cependant, les choses évoluent très vite chez MS. Dans cet élan, MS vient d’annoncer la sortie de MSTest V2. Actuellement en preview,  il a pour objectif de rattraper son retard sur les frameworks de tests concurrents, d’innover et de suivre les évolutions technologiques.

Les principales améliorations

MSTest V2 constitue une véritable évolution et 4 de ses nouveautés méritent une attention toute particulière : l’architecture unifiée, le support des tests paramétriques, l’amélioration des catégories et la disponibilité via Nuget.

Architecture unifiée

La refonte de MSTest réalisée par les équipes de MS se traduit par une prise en charge de .NET Core avec un nouvel environnement d’exécution (DNX) et une nouvelle architecture.

Support des tests paramétriques

C’est une fonctionnalité présente depuis plusieurs années chez NUnit et d’autres alternatives. L’absence de cette fonctionnalité pouvait suffire d’argument pour se passer de MSTest. Mais qu’est-ce qu’un test paramétrique?

Lors de la réalisation d’un test, il est habituellement convenu de tester plusieurs jeux de données (ex : je teste une conversion de dollar en euro, je souhaite tester avec 3, 100, 1/3, -double.Max, +double.Max…).

Pour ce faire, seulement quelques solutions sont disponibles avec MSTest v1 :

  • La méthode “classique” : faire du Data-driven testing (DDT). Cela consiste à déporter les données de test dans des bases de données externes (XML, SQL, CSV…). Chaque ligne est traitée comme un cas de test. Pratique pour un grand jeu de données, cela n’en reste pas moins très lourd pour un petit jeu de données.
  • La méthode “sale” : faire une collection  de données (via un tableau) et boucler dessus. Problème : si le test échoue sur la première entrée, le test s’arrête. Bien sûr il est possible de bidouiller pour que le reste des données soient jouées… mais ça ne reste que de la bidouille
  • La méthode “astucieuse” : passer par une programmation orientée aspect, via par exemple PostSharp pour cacher toute une logique de gestion des paramètres à travers des aspects (exemple ici).
  • La méthode “il faut vraiment que ça change” :  faire un test pour chaque cas de test… ça permet de savoir quel cas de test échoue, mais bien évidemment c’est extrêmement lourd…
  • La méthode des “tests paramétrés” : je passe sur un autre framework de test comme NUnit ce qui me permet de passer les jeux de test directement à la méthode de test, permettant ainsi comme pour un jeu de données via une base de données externes de vérifier chaque ligne de données.

Aujourd’hui, MSTest v2 met à disposition les tests paramétrés via l’utilisation de 2 attributs :

  • DataTestMethod : spécifie que la méthode est un test
  • DataRow : représente une ligne de données, chacune des entrées de la DataRow sera disponible à travers les paramètres de la méthode.

NB: il est possible de nommer chaque cas de test à travers la propriété DisplayName de l’attribut DataRow, cela permet de facilement s’y retrouver lorsqu’un test échoue.

Elargissement du scope des catégories

MSTest V2 offre enfin la possibilité de mettre en place les catégories de test au niveau de la classe ou même d’une assembly. Il est enfin possible de se passer de PostSharp, de réécriture ou de bidouille pour cela

Disponible à travers Nuget

MSTest V2  est disponible sur Nuget via les packages :

  • MSTest.TestFramework : framework MSTest
  • MSTest.TestAdapter : adaptateur permettant de trouver et de jouer les tests

Il existe de multiples adaptateurs en fonction du framework de test utilisé. Il est par exemple possible d’utiliser le framework de test Xunit.Net à travers l’adaptateur xunit.runner.visualstudio.

NB : dotnet-test-mstest est un adaptateur pour .NET Core, sachant que ce dernier supporte désormais les .csproj, cet adaptateur est devenu obsolète et l’utilisation de MSTest.TestAdapter peut se faire dans toutes les circonstances.

Et ça ne fait que commencer…

Pour la suite MS prévoit d’autres évolutions pour MSTest qui pourront être suivies sur le blog Visual Studio ALM https://blogs.msdn.microsoft.com/visualstudioalm/

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s