Les tests unitaires

Dificulté:

Les tests et particulièrement les tests unitaires sont très à la mode actuellement, ils sont particulièrement utiles pour améliorer la robustesse du logiciel.

Description d'un test unitaire

Un test unitaire est globalement une méthode qui va tester le résultat d'une autre méthode. Si vous avez une méthode double CalculDivision(double a, double b) qui retourne le résultat de la division de deux nombres vous allez pouvoir écrire une méthode de test (TestCalculDivision) qui va appeler CalculDivision en faisant varier les paramètres (a et b) pour s'assurer que le résultat est toujours correct.

Normalement chaque nouvelle méthode écrite par le développeur doit être testée avec un test unitaire.

Pour simplifier cette tâche de nombreux outils ont été développés par des sociétés, ils permettent de sélectionner les tests, de les lancer et d'analyser les résultats. Nous utiliserons l'outil de test intégré à Visual Studio.

Tests unitaires avec le projet « Association »

Pour pouvoir écrire des tests unitaires, il nous faut une méthode à tester. Nous allons ajouter une méthode à la classe TypeAdhésion pour calculer une réduction au tarif de l’adhésion.

        /// < summary>
        /// ReductionTarif applique une réduction au tarif de l'adhésion.
        /// On arrondit le nouveau Tarif à la valeur entière la plus proche.
        /// <summary>
        /// <param name="reduction">la réduction en pourcent</param>
        public void ReductionTarif(int reduction)
        {
            double reduc = 1 - (reduction / 100.0);
            Tarif = Convert.ToInt32(Math.Round(Tarif * reduc));
         }
    

Ajout d’un projet de tests unitaire dans votre projet

Dans Visual Studio vous pouvez avoir une solution qui contient plusieurs projets. Dans tous nos exemples précédents notre solution ne contenait qu’un seul projet (le projet association). Nous allons ajouter un deuxième projet à notre solution.

Dans Visual Studio sélectionnez votre solution dans la fenêtre « Explorateur de solutions » --> clic droit puis « Ajouter » --> « Nouveau projet «. Dans la partie « Test » choisir « Projet de test unitaire ». Pas besoin de changer le nom. Cliquez sur OK.

Un nouveau projet est ajouté à votre solution.

projet de test unitaire

Deux choses importantes à faire

1) Faire le lien entre le projet de test et le projet « association ». Dans le projet de tes sélectionner « Référence » --> clic droit --> « Ajouter une référence ». Sélectionner « Projet » dans la nouvelle fenêtre. Cocher le nom de votre application principale puis OK.

2) Modifier la classe qui contient la méthode à tester. La classe doit être « public » pour pouvoir être vue par le projet de test.

On doit avoir : public class TypeAdhesion


La suite est assez simple car Visual Studio a généré un squelette de code dans le fichier UnitTest1.cs.

Il suffit de rajouter votre code à l’intérieur de la fonction de test. Chaque méthode doit obligatoirement comporter un Assert. C’est cette commande qui détermine si le test est OK ou KO.

Dans l’exemple ci-dessous on a créé deux tests pour la méthode RéductionTarif.

    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestReductionTarif()
        {
            TypeAdhesion t = new TypeAdhesion(1, "loisir", 100);
            //On applique une réduction de 20% au tarif.
            t.ReductionTarif(20);
            //le tarif doit maintenant être égal à 80 en arrondissant.
            Assert.AreEqual(t.Tarif, 80);
        }
        
        [TestMethod]
        public void TestReductionTarif1()
        {
            TypeAdhesion t = new TypeAdhesion(1, "loisir", 12);
            //On applique une réduction de 20% au tarif.
            t.ReductionTarif(20);
            //le tarif doit maintenant être égal à 10 en arrondissant.
            Assert.AreEqual(t.Tarif, 10);
        }
       
    }
    

Pour lancer les tests :

« Test « --> « Exécuter» --> « Tous les tests ». La fenêtre « explorateur de tests » va apparaître pour vous indiquer le résultat des tests.

lancement test unitaire

L'exemple complet est sur GitHub.C'est la version qu'il vaut mieux utiliser pour développer l'application complète.

Les questions fréquentes :

  • Les méthodes qui retournent void ou qui sont privées ne seront pas testables unitairement facilement.
  • Les méthodes dans le DAL peuvent ne pas être testées unitairement, il est difficile de faire des tests unitaires en face d’une base de données, de plus, la plupart des gens considère que ce genre de tests sont des tests d’intégration.
  • La couche présentation est très difficile à tester unitairement.
  • Ce sont les classes de logique métier qui sont le plus facilement testables.
La plupart des programmeurs débutants ne s’en rendent pas compte car beaucoup ne s’intéressent qu’à la couche présentation mais ce sont en fait les tests qui influencent le plus la façon de programmer. Au niveau du BTS il n’y a pas besoin d’écrire beaucoup de tests unitaires, deux ou trois suffisent. Il suffit de créer quelques règles de gestion supplémentaires et de créer des tests unitaires relativement simples, rien de difficile. Un peu comme la gestion de version il ne faut pas chercher à se compliquer la vie. C’est triste de ne pas encourager les étudiants qui prennent des risques mais c’est comme ça.