1 - Préparation
Créer un projet Tests
Pour contenir les tests de l'application MVC et de l'API, nous allons créer un projet responsable des différents tests.
- Sous la solution
Snowfall
->Add
->New Project
- Choisi
Unit Test Project
sous.NET / .NET Core
dans la liste de gabarits à gauche - Nommer le projet
Snowfall.Tests
- Choisir
xUnit
comme librairie de tests - Appuyer sur
Create
Ajouter une référence aux autres projets
Le projet Tests
est susceptible de devoir utiliser toutes les autres couches de l'application afin de les tester. Ainsi, vous pouvez ajouter une référence aux autres projets.
- Sous
Snowfall.Tests
-> Clic droit ->Add
->Reference...
- Cocher tous les projets
- Appuyer sur
Add
Désactiver la parallélisation des tests
Pour des raisons de performance, les tests peuvent être effectués en parallèle et c'est le comportement par défaut. Cependant, cela cause des problèmes avec les tests d'intégration qui doivent réinitialiser la base de données lors de chaque test. Nous y reviendrons plus tard, mais pour l'instant assurez-vous de désactiver le parallélisme.
Pour ce faire, vous pouvez ajouter la ligne suivante dans un fichier Usings.cs
que vous pouvez créer.
[assembly: CollectionBehavior(DisableTestParallelization = true)]
Exécuter les tests
Vous verrez qu'un test par défaut est présent, soit UnitTest1.cs
.
public class UnitTest1
{
[Fact]
public void Test1()
{
}
}
Un test ou une série de tests en xUnit
est contenu dans une classe. En l'occurrence, UnitTest1
ici.
Ensuite, un test à proprement dit doit posséder l'attribut [Fact]
.
Pour exécuter ce test et tous les autres tests qui pourraient être présents, vous pouvez utiliser le menu principal Tests -> Run Unit Tests
Une solution alternative est de faire clic droit
sur le projet de tests, puis Run Unit Tests
Vous verrez ainsi apparaitre dans la console du bas le résultat des tests. Comme Test1()
est vide, il apparaitra comme un succès.
Exécuter les tests de façon isolée
Plutôt que d'exécuter tous les tests, il est aussi possible d'exécuter les tests liés à une classe de tests.
Par exemple, en cliquant avec le bouton de droite sur la classe et ensuite Run Unit Tests
On peut faire la même chose directement dans le fichier du test à l'aide du bouton Play
dans la marge:
Vous pouvez même exécuter un seul test (une fonction):
Explorateur de tests
Lorsque vous exécutez les tests, l'explorateur de tests apparait dans le bas, vous permettant d'avoir plus d'information sur les tests ayant réussi ou échoués. De plus, il est possible de rouler un test à partir de cette vue.
Assert
Un test doit contenir un ou plusieurs Assert
. Ce sont des lignes de vérification.
Par exemple:
public class UnitTest1
{
[Fact]
public void Test1()
{
bool resultat = true;
Assert.True(resultat);
}
}
Ici, on veut tester que resultat
est true
. C'est la condition à vérifier pour que le test passe. Si vous exécutez ce test, vous obtiendrez un crochet vert.
À l'opposé, si resultat
est false
:
public class UnitTest1
{
[Fact]
public void Test1()
{
bool resultat = false;
Assert.True(resultat);
}
}
Vous obtiendrez:
Assert.True() Failure
Expected: True
Actual: False
Comme quoi le test s'attend à ce que la valeur soit true
alors qu'elle est false
.
Il y a plusieurs types de Assert
possibles, dont les plus fréquents que nous allons utiliser:
Assert.True
pour tester qu'un résultat booléen esttrue
Assert.False
pour tester qu'un résultat booléen estfalse
Assert.Equal
pour comparer deux valeursAssert.IsType<>()
pour tester qu'un retour est d'un certain type d'objetAssert.Contains()
pour tester qu'unestring
contient bien un certain texteAssert.NotNull()
pour tester qu'un objet n'est pas nullAssert.NotEmpty()
pour tester qu'une collection n'est pas vide- Etc.