Maison >développement back-end >C++ >Comment puis-je me moquer des méthodes d'extension avec Moq lorsqu'il ne les prend pas directement en charge ?

Comment puis-je me moquer des méthodes d'extension avec Moq lorsqu'il ne les prend pas directement en charge ?

DDD
DDDoriginal
2025-01-20 02:16:09259parcourir

How Can I Mock Extension Methods with Moq When It Doesn't Directly Support Them?

Méthodes d'extension moqueuses dans les tests unitaires : une approche pratique

Les tests unitaires nécessitent souvent des méthodes d'extension moqueuses, une tâche qui semble au départ problématique avec Moq en raison de son manque de support direct. Cela vient de la nature des méthodes d’extension : ce sont essentiellement des méthodes statiques étendant les classes existantes. Moq, cependant, se moque principalement des instances d'objets, pas des méthodes statiques.

La solution réside dans la compréhension que les méthodes d'extension ajoutent des fonctionnalités à une classe. Par conséquent, au lieu de nous moquer de la méthode d'extension elle-même, nous nous moquons de la classe target.

Examinons un scénario courant :

<code class="language-csharp">public class SomeType {
    public int Id { get; set; }
}

// ... (Extension method definition elsewhere) ...</code>

L'exemple fourni montre la nécessité de se moquer de la méthode d'extension FirstOrDefault appliquée à un List<SomeType>. Au lieu de nous moquer directement de FirstOrDefault, nous créons une simulation de List<SomeType> :

<code class="language-csharp">var listMock = new Mock<List<SomeType>>();
listMock.Setup(l => l.FirstOrDefault(st => st.Id == 5))
        .Returns(new SomeType { Id = 5 });</code>

Cette configuration nous permet de définir la valeur de retour de la méthode d'extension FirstOrDefault lorsqu'elle est appelée avec le prédicat spécifié. Nous contrôlons le comportement indirectement, via la simulation de l'objet liste.

Cette technique contourne efficacement les limitations de Moq, permettant des tests unitaires complets qui incluent des scénarios impliquant des méthodes d'extension. En nous concentrant sur la simulation de l'objet sur lequel la méthode d'extension opère, nous prenons le contrôle de son comportement et obtenons une couverture de test robuste.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn