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
Libérer: 2025-01-20 02:16:09
original
191 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal