2-3 Premier test d'intégration (MVC)
Comme premier test d'intégration, nous allons charger la page d'accueil via l'action Index
du contrôleur Evenements
, correspondant à la route "/".
Créer une coquille de test AccueilTests
utilisant SnowfallMvcApplicationFactory
Pour créer un test qui utilisera l'application en mode Test
, on peut procéder ainsi:
-
Créer un dossier
TestsIntegration
sousWeb.Mvc
viaAdd
->Directory
-
Créer une classe
AccueilTests
sous le dossierTestsIntegration
viaAdd
->Class/Interface
Snowfall.Tests/Web.Mvc/TestsIntegration/AccueilTests.csnamespace Snowfall.Tests.Web.Mvc.TestsIntegration;
public class AccueilTests
{
} -
Ensuite, on peut faire hériter la classe de
IClassFixture<SnowfallMvcApplicationFactory>
. Évidemment, remplacez le typeSnowfallMvcApplicationFactory
par celui de votre propreWebApplicationFactory
Snowfall.Tests/Web.Mvc/TestsIntegration/AccueilTests.csnamespace Snowfall.Tests.Web.Mvc.TestsIntegration;
public class AccueilTests : IClassFixture<SnowfallMvcApplicationFactory>
{
} -
Puis, on reçoit via le constructeur l'instance de l'application
Snowfall.Tests/TestsMvc/TestsIntegration/AccueilTests.csnamespace Snowfall.Tests.Web.Mvc.TestsIntegration;
public class AccueilTests : IClassFixture<SnowfallMvcApplicationFactory>
{
private readonly SnowfallMvcApplicationFactory _application;
public AccueilTests(SnowfallMvcApplicationFactory application)
{
_application = application;
}
} -
Finalement, on peut ajouter une première fonction de test qui sera responsable d'obtenir et de vérifier la page d'accueil, soit
Obtenir_AccueilUtilisateurAnonyme_PageAfficheTexte
.Snowfall.Tests/Web.Mvc/TestsIntegration/AccueilTests.csnamespace Snowfall.Tests.Web.Mvc.TestsIntegration;
public class AccueilTests : IClassFixture<SnowfallMvcApplicationFactory>
{
private readonly SnowfallMvcApplicationFactory _application;
public AccueilTests(SnowfallMvcApplicationFactory application)
{
_application = application;
}
[Fact]
public async Task Obtenir_AccueilUtilisateurAnonyme_PageAfficheTexte()
{
}
}infoOn essaie autant que possible d'utiliser le format:
-
Le nom de la méthode ou de l'action testée
-
Le scénario ou cas d'utilisation testé
-
Le résultat ou comportement attendu
Ici, on veut tester qu'il est possible d'obtenir la page d'accueil en tant qu'utilisateur anonyme (non connecté) et que la page affichera du texte attendu.
-
Test du test
Vous pouvez exécuter le test et normalement tout devrait être au vert pour le moment! Rien n'est réellement testé, mais on veut s'assurer que le tout compile et que les tests sont exécutés.
Créer un client HTTP
lié à l'instance de l'application de test
Peut-être vous demandez-vous comment allons-nous faire cette première requête pour tester la page d'accueil.
Pour faire des requêtes, il nous faut un client HTTP
! Pour créer ce dernier, on doit appeler CreateClient
sur l'instance de l'application:
[Fact]
public async Task Obtenir_AccueilUtilisateurAnonyme_PageAfficheTexte()
{
// Arrange
HttpClient client = _application.CreateClient();
}
Test du test
Exécutez le test. Si quelque chose a à échouer avec la configuration initiale, c'est ici que cela deviendra apparent. Si tout est au vert, vous pouvez poursuivre!
Vérifier que la base de données snowfall_tests
a été migrée
Vous pouvez en profiter pour vérifier que votre base de données test contient bien les tables.
En effet, le fait d'avoir instancié l'application en mode test devrait avoir exécuté les migrations. Comme via appsettings.Test.json
c'est la BD de test qui est référencée, les migrations ont dû être exécutées dans cette dernière.
Faire une requête via HttpClient
Il est maintenant temps d'obtenir la page d'accueil. On peut utiliser GetAsync
avec l'URL désirée en paramètre sur le client HTTP pour effectuer une requête.
[Fact]
public async Task Obtenir_AccueilUtilisateurAnonyme_PageAfficheTexte()
{
// Arrange
HttpClient client = _application.CreateClient();
// Act
string url = "/";
HttpResponseMessage reponse = await client.GetAsync(url);
}
Vérifier que le retour est un succès
On peut ensuite vérifier que le retour est un succès via reponse.EnsureSuccessStatusCode()
:
[Fact]
public async Task Obtenir_AccueilUtilisateurAnonyme_PageAfficheTexte()
{
// Arrange
HttpClient client = _application.CreateClient();
// Act
string url = "/";
HttpResponseMessage reponse = await client.GetAsync(url);
// Assert
reponse.EnsureSuccessStatusCode();
}
Vérifier que la page contient un terme précis
Pour vérifier que le contenu de la page est bien affiché comme attendu et qu'il ne s'agit pas, par exemple, d'une page vide ou avec un message d'erreur quelconque, on peut rechercher un terme dans la page.
Par exemple, il devrait normalement y avoir le terme "Filtrer par ville" qui est présent dans la barre de filtre à gauche.
[Fact]
public async Task Obtenir_AccueilUtilisateurAnonyme_PageAfficheTexte()
{
// Arrange
HttpClient client = _application.CreateClient();
// Act
string url = "/";
HttpResponseMessage reponse = await client.GetAsync(url);
// Assert
reponse.EnsureSuccessStatusCode();
string contenu = await reponse.Content.ReadAsStringAsync();
Assert.Contains("Filtrer par ville", contenu);
}
Vous pouvez exécuter le test et le tout devrait fonctionner.