Créer des tests unitaires avec Visual Studio 201...4 avril 2011

Tests / Performance

Il existe depuis quelque temps dans les dernières versions de Visual Studio (2008 et 2010) un menu nommé Test permettant d’ajouter des tests unitaires au sein de votre solution.

Je me propose de vous expliquer les différents éléments relatifs à cet environnement au sein de Visual Studio 2010 dans ce bref article.

Préparation de l’environnement de travail

Nous allons commencer par créer une librairie de classes C# contenant un objet à tester.

Ouvrez donc Visual Studio 2010, puis créez un nouveau projet de type Class Library comme le montre la capture d’écran suivante :

Ajoutez-y une classe avec le code suivant :

using System.Linq;

namespace ClassLibrary1
{
    public class Class1
    {
        public int CalculeSomme(int a, int b, params int[] c)
        {
            return a + b + (c == null ? 0 : c.Sum());
        }
    }
}

Création du test unitaire

Cliquez désormais sur le menu Test, puis sur New Test… (à adapter selon la culture de votre environnement) comme le montre la capture ce-contre :

Entrez le nom qui sera donné au projet de test ainsi créé. Il est en effet préférable de placer vos tests dans un projet séparé, vous des raisons évidentes de clarté et d’architecture.

Votre solution devrait ressembler à ceci :

Pensez à rajouter une référence à votre librairie de classe dans votre projet de tests unitaires afin de pouvoir faire appel aux objets définis dans cette dernière.

Maintenant, remplissez la méthode TestMethod1 avec les assertions mettant en évidence un jeu de résultat attendu quelque soit la suite que vous donnerez à vos développements :

[TestMethod]
public void TestMethod1()
{
	var c = new Class1();

	Assert.AreEqual(3, c.CalculeSomme(1, 0, 1, 1));
	Assert.AreEqual(7, c.CalculeSomme(3, 4));
	Assert.AreEqual(0, c.CalculeSomme(5, -2, -3));
}

Vous pourrez trouver la liste des méthodes d’assertion disponibles en suivant ce lien MSDN : http://msdn.microsoft.com/fr-fr/library/ms245297(v=VS.100).aspx

Lancement des tests

Pour lancer votre test unitaire, il suffit désormais d’ouvrir la fenêtre des tests unitaires présents en cliquant sur le menu Test, puis Window et enfin Test View comme le montre la capture suivante :

Cliquez ensuite sur le bouton Run en haut à gauche de cette fenêtre pour lancer les tests sélectionnés. Si vous rajoutez un test, cliquez sur le bouton Refresh juste à droite de celui pour lancer les tests afin de rebuilder l’assembly de tests et d’afficher la liste actualisée des tests du projet.

La fenêtre de résultats suivante apparaît alors (pour les besoin de l’article, j’ai rajouté un test nommé TestMethod2 contenant une assertion fausse) :

Si un test réussi, la colonne Result contient la valeur Passed, sinon Failed. Dans le cas d’un résultat dans l’état Failed, double-cliquez sur la ligne en erreur dans cette fenêtre, vous verrez les détails de l’erreur :

Informations pratiques

Comme vous l’aurez remarqué, Le fait d’avoir rajouter un projet de tests unitaires à votre solution aura eu pour effet de rajouter 3 fichiers dans le dossier fictif « Solution Items » : ClassLibrary11.vsmdi, Local.testsettings et TraceAndTestImpact.testsettings.

  • ClassLibrary11.vsmdi, contient une arborescence organisé de tests, groupés et ordonnés selon vos besoins. Au départ, ce fichier ne contient aucune entrée mais le noeud « Tests Not in a List » sera rempli avec un élément correspondant à la méthode « TestMethod1″ suite au premier lancement de ce test.
  • Local.testsettings, contient tout les paramétrages de vos tests, comme par exemple l’exécution de scripts pre et post test ou encore les timeout d’exécution de ces derniers.
  • TraceAndTestImpact.testsettings, contient d’autres paramétrages sous le même format que le fichier Local.testsettings.

Conclusion

Les tests unitaires sont un élément essentiel d’un projet dès lors que ce dernier commence à prendre une taille conséquente (une dizaine d’objets métier je dirai). Ils permettent de définir un comportement attendu quelle que soit la tournure que prennent vos développements dans le futur. Les tests unitaires assurent ainsi la cohérence entre les développements et les attentes métier, c’est pour cela qu’ils sont très souvent conçus avec l’aide du métier (utilisateur final ou MOA dans le cadre d’un projet d’entreprise).

Edit : Cet article réalisé par un étudiant de l’école EPITA présente une autre manière de créer des tests de manière automatique via le wizard de Visual Studio, idéal pour des tests simples : http://www.mti.epita.fr/blogs/2008/07/12/les-tests-unitaires-sous-visual-studio-2008/