Tests d'intégration avec WebApplicationFactory
IntermédiaireWebApplicationFactory 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:")); }); });