Maison >développement back-end >C++ >Comment puis-je simuler efficacement les méthodes d'extension avec Moq ?

Comment puis-je simuler efficacement les méthodes d'extension avec Moq ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-20 02:07:14863parcourir

How Can I Mock Extension Methods Effectively with Moq?

Méthodes d'extension moqueuses utilisant Moq : une alternative

Lorsque vous testez du code qui repose sur des méthodes d'extension, il est essentiel de maintenir la stabilité des tests contre d'éventuelles défaillances futures de ces méthodes. Bien que la fonctionnalité de Moq ne s'étende pas directement au remplacement des méthodes statiques, il existe une solution de contournement.

Méthodes alternatives

Les méthodes d'extension sont des méthodes statiques par nature et ne peuvent pas être simulées directement par Moq. Au lieu de cela, vous pouvez isoler l’implémentation d’une méthode d’extension en exploitant une classe concrète et ses méthodes statiques.

Considérons l'exemple suivant :

<code class="language-c#">public static class ExtensionClass
{
    public static int GetValue(this SomeType obj) => obj.Id;
}

public class SomeType
{
    public int Id { get; set; }
}</code>

Mise en œuvre des tests

Pour créer un mock qui n'appelle pas de méthode d'extension, référencez directement la classe statique :

<code class="language-c#">var concreteClassMock = new Mock<ExtensionClass>();
concreteClassMock.Setup(c => c.GetValue(It.IsAny<SomeType>())).Returns(5);</code>

En ciblant les méthodes statiques d'une classe concrète, vous pouvez simuler efficacement le comportement d'une méthode d'extension sans vous appuyer directement sur la méthode d'extension elle-même. Cela garantit que les échecs de test proviennent uniquement de la classe testée et non d'éventuels échecs futurs de la méthode d'extension.

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