</>
Plan du cours — 29/46

Mocker des dépendances avec Moq

Intermédiaire

Un mock remplace une dépendance réelle (base de données, API externe...) par un double contrôlable dans le test.

dotnet add package Moq
public class UtilisateurServiceTests
{
    [Fact]
    public async Task CreerUtilisateur_EmailValide_AppelleLeRepository()
    {
        // Arrange : on crée un faux repository dont on contrôle le comportement
        var repoMock = new Mock<IUtilisateurRepository>();
        repoMock
            .Setup(r => r.CreerAsync(It.IsAny<string>(), It.IsAny<string>()))
            .ReturnsAsync(new Utilisateur { Id = 1, Nom = "Alice", Email = "alice@example.com" });

        var service = new UtilisateurService(repoMock.Object);

        // Act
        var resultat = await service.InscrireAsync("Alice", "alice@example.com");

        // Assert
        Assert.Equal("Alice", resultat.Nom);
        repoMock.Verify(r => r.CreerAsync("Alice", "alice@example.com"), Times.Once);
    }
}

Astuce : mockez les interfaces de vos dépendances (IUtilisateurRepository), jamais des classes concrètes — c'est pour ça qu'on injecte des abstractions plutôt que des implémentations dans les constructeurs.