Mocker des dépendances avec Moq
IntermédiaireUn 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.