</>
Plan du cours — 30/46

Tests d'intégration avec WebApplicationFactory

Intermédiaire

WebApplicationFactory démarre une vraie instance de l'application (en mémoire) pour tester le pipeline HTTP complet, middlewares inclus.

dotnet add package Microsoft.AspNetCore.Mvc.Testing
public class UtilisateursApiTests : IClassFixture<WebApplicationFactory<Program>>
{
    private readonly HttpClient _client;

    public UtilisateursApiTests(WebApplicationFactory<Program> factory)
    {
        _client = factory.CreateClient();
    }

    [Fact]
    public async Task GetUtilisateurs_RetourneStatut200()
    {
        var response = await _client.GetAsync("/utilisateurs");

        response.EnsureSuccessStatusCode();
        Assert.Equal("application/json; charset=utf-8", response.Content.Headers.ContentType?.ToString());
    }

    [Fact]
    public async Task PostUtilisateur_DonneesValides_RetourneStatut201()
    {
        var payload = new { nom = "Alice", email = "alice@example.com" };

        var response = await _client.PostAsJsonAsync("/utilisateurs", payload);

        Assert.Equal(HttpStatusCode.Created, response.StatusCode);
    }
}

Cas pratique : remplacer la vraie base de données par une base SQLite en mémoire pour des tests d'intégration rapides et isolés.

var factory = new WebApplicationFactory<Program>().WithWebHostBuilder(builder =>
{
    builder.ConfigureServices(services =>
    {
        services.RemoveAll<DbContextOptions<AppDbContext>>();
        services.AddDbContext<AppDbContext>(options =>
            options.UseSqlite("DataSource=:memory:"));
    });
});