Tests unitaires avec MSTest et .NET Core

Temps approximatif : 0 heure et 26 minutes

Tests unitaires avec MSTest et .NET Core

Bonjour à tous
Nous allons voir dans ce tutoriel comment faire des tests unitaires avec MSTest et .NET Core

Vous êtes prêts ?

1 - Création du projet source

Ouvrez une fenêtre d'interpréteur de commandes et créez le dossier suivant avec mkdir
mkdir mstest
cd mstest


Créez la solution
dotnet new sln

Créez le dossier du projet source
mkdir PrimeService
cd PrimeService


Créez un projet source de type bibliothèque de classes
dotnet new classlib

Renommez la classe Class1.cs en PrimeService.cs
rename Class1.cs PrimeService.cs

Éditez la classe PrimeService.cs avec votre éditeur de texte
using System;
namespace Prime.Services
{
    public class PrimeService
    {
        public bool IsPrime(int value) 
        {
            throw new NotImplementedException("Vous devez implémenter cette méthode");
        } 
    }
}
 

La classe PrimeService contient pour l'instant une méthode non implémentée IsPrime()

Vous devez ajouter le projet PrimeService à votre solution
(Vérifiez que vous êtes dans le dossier racine de la solution)
dotnet sln add PrimeService/PrimeService.csproj

2 - Création du projet Tests

Nous allons créer un projet Tests, c'est ici que nous effectuerons nos tests et vérifierons que nos classes et méthodes fonctionnent comme prévu
Les tests unitaires sont un moyen formidable de garantir la non régression du code d'une application
Tout développeur C# doit les exécuter pour s'assurer que ses modifications sur le code n'ont pas de répercutions sur les autres fonctionnalités de l'application
Le développeur C# doit aussi ajouter de nouveaux tests pour valider ses propres modifications
Créez donc un dossier PrimeService_Tests pour accueillir le projet Tests
mkdir PrimeService_Tests
cd PrimeService_Tests


Créez un nouveau projet de type mstest
dotnet new mstest

La commande 'dotnet new mstest' va créer un projet de tests qui utilise la librairie de tests unitaires MSTest

Nous allons ajouter la bibliothèque de classes PrimeService que nous souhaitons tester comme dépendance au projet de tests PrimeService_Tests
(Vérifiez que vous êtes dans PrimeService_Tests)
dotnet add reference ../PrimeService/PrimeService.csproj

Nous allons maintenant ajouter le projet PrimeService_Tests à la solution
(Vérifiez que vous êtes à la racine de la solution)
dotnet sln add PrimeService_Tests\PrimeService_Tests.csproj

3 - Création du premier test

Dans PrimeService_Tests, renommez la classe UnitTest1.cs en PrimeService_IsPrimeShould.cs
cd PrimeService_Tests
rename UnitTest1.cs PrimeService_IsPrimeShould.cs


Maintenant nous sommes prêts à rédiger méticuleusement nos tests...
L'approche TDD impose d'écrire un test défaillant et de le corriger pour qu'il réussisse
Vous allez faire un premier test pour vérifier que la méthode publique isPrime() de la classe PrimeService retourne bien 'Faux' si vous lui passer '1' car le chiffre 1 n'est pas un nombre premier

Éditez donc la classe PrimeService_IsPrimeShould.cs, elle doit ressembler à ceci :
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Prime.Services;
namespace Prime.UnitTests.Services
{
    [TestClass]
    public class PrimeService_IsPrimeShould
    {
        private readonly PrimeService _primeService;
        public PrimeService_IsPrimeShould()
        {
            _primeService = new PrimeService();
        }
        [TestMethod]
        public void ReturnFalseGivenValueOf1()
        {
            var result = _primeService.IsPrime(1);
            Assert.IsFalse(result, "1 ne doit pas être un nombre premier");
        }
    }
}
 

Je résume...
Après avoir importé le type 'Microsoft.VisualStudio.TestTools.UnitTesting' et après avoir importé le projet source que vous souhaitez tester; vous devez créer une classe publique et vous devez la marquer avec un attribut [TestClass] pour dire au framework de tests que c'est ça la classe que vous souhaitez tester, ensuite vous devez déclarer une variable privée en lecture seule de type PrimeService (la bibliothèque de classes à tester). Après vous devez initialiser cette variable dans le constructeur de la classe en lui affectant une instance de l'objet que vous voulez tester, dans notre cas c'est PrimeService

Un nombre premier est un nombre entier naturel (non nul) qui admet exactement 2 diviseurs distincts : 1 et lui-même

Voici les 25 nombres premiers inférieurs à 100 :
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89 et 97

Compilez vos deux projets et exécutez les tests
dotnet build
dotnet test



Aïe aïe aïe...votre test échoue. C'est normal vous n'avez pas encore implémentée la méthode isPrime() pour qu'il réussisse

Comme tout bon développeur Csharp vous connaissez la méthode TDD pour Test-Driven Development, ou développement piloté par les tests, et vous savez l'appliquer...

La méthode TDD permet d'explorer et de préciser le besoin, puis de spécifier le comportement souhaité du logiciel en fonction de son utilisation avant le codage

Voici les 5 étapes du cycle TDD :
  • Écrire un seul test qui décrit une partie du problème
  • Vérifier que le test échoue
  • Écrire juste assez de code pour que le test réussisse
  • Vérifier que le test passe
  • Remanier le code et l'améliorer sans en changer le comportement
Vous savez qu'il faut répéter successivement ce cycle jusqu'à résoudre le problème

Puisque vous êtes un bon développeur C# donc vous le savez !

Écrivez donc le code le plus simple qui fonctionne dans la classe PrimeService :
public bool IsPrime(int value)
{
    if (value== 1)
    {
        return false;
    }
    throw new NotImplementedException("Vous devez implémenter cette méthode");
}
 

Ré-exécutez 'dotnet test' dans le répertoire mstest
Vous remarquerez cette fois que le test est passé avec succès


4 - Ajout de fonctionnalités supplémentaires

Dans cette partie du tuto nous allons utiliser l'attribut [DataTestMethod]
L'attribut [DataTestMethod] représente une suite de tests qui exécutent la même méthode avec des arguments différents

Vous pouvez utiliser l'attribut [DataRow] pour spécifier les valeurs à passer à la méthode
Au lieu de créer de nouveaux tests, appliquez seulement ces deux attributs pour créer un test unique piloté par les données
[DataTestMethod]
[DataRow(-1)]
[DataRow(0)]
[DataRow(1)]
public void ReturnFalseGivenValuesLessThan2(int value)
{
    var result = _primeService.IsPrime(value);
    Assert.IsFalse(result, $"{value} ne doit pas être un nombre premier");
}
 

Exécutez 'dotnet test'
Deux de vos tests échouent

Pour que tous vos tests réussissent, modifiez simplement la clause if au début de la méthode IsPrime():
if (value< 2)

Voilà c'est tout pour aujourd'hui !

Vous pouvez Télécharger le code source ou regarder la vidéo


Continuez votre lecture avec : Comment implémenterait un développeur csharp la persistance de données avec le framework ORM Fluent NHibernate
Commentaires


Laisser un commentaire
E-mail (obligatoire) (strictement confidentielle)

Nom (obligatoire)

Site web

Entrez votre commentaire...

Question de sécurité : Combien font 1 + 1 ?



























Développé par Developpeur-Csharp.com
Mentions légales
Testé et compatible, à partir de : Firefox 3, Internet Explorer 7.0, Safari 4, Chrome, et Opera 9.
















Newsletter
Abonnez-vous à ma newsletter pour ne rater aucun article !
Adresse mail :

Discussion
Instantanée