Aller au contenu principal

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.

  1. Sous la solution Snowfall -> Add -> New Project
  2. Choisi Unit Test Project sous .NET / .NET Core dans la liste de gabarits à gauche
  3. Nommer le projet Snowfall.Tests
  4. Choisir xUnit comme librairie de tests Imgur
  5. 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.

  1. Sous Snowfall.Tests -> Clic droit -> Add -> Reference...
  2. Cocher tous les projets
  3. 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.

Snowfall.Tests/Usings.cs
[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

Imgur

Une solution alternative est de faire clic droit sur le projet de tests, puis Run Unit Tests

Imgur

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

Imgur

On peut faire la même chose directement dans le fichier du test à l'aide du bouton Play dans la marge:

Imgur

Vous pouvez même exécuter un seul test (une fonction):

Imgur

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 est true
  • Assert.False pour tester qu'un résultat booléen est false
  • Assert.Equal pour comparer deux valeurs
  • Assert.IsType<>() pour tester qu'un retour est d'un certain type d'objet
  • Assert.Contains() pour tester qu'une string contient bien un certain texte
  • Assert.NotNull() pour tester qu'un objet n'est pas null
  • Assert.NotEmpty() pour tester qu'une collection n'est pas vide
  • Etc.