Question

Le fait d'être obligé de virtualiser tous les accesseurs de propriété que vous voulez vous moquer ne va-t-il pas à l'encontre du but de la moquerie?

Je veux dire, si je dois modifier mon objet et virtualiser chaque accessoire dont je veux me moquer, ne pourrais-je pas aussi bien hériter de ma classe et me moquer d'elle moi-même?

Était-ce utile?

La solution

Votre question est très valable mais si vous y réfléchissez, il n'y a pas d'autre moyen de se moquer d'une classe. Si vous prenez une interface, ce n'est qu'un contrat, donc le framework simulé peut se moquer de la façon dont vous le souhaitez, mais si vous prenez une classe, il a déjà une implémentation pour ses membres.

Ainsi, le framework fictif, pour pouvoir se moquer des membres de la classe, doit hériter de la classe et remplacer le comportement du membre comme demandé et à cette fin, seuls les membres virtuels fonctionneront.

Par exemple. si vous avez (je montre des méthodes mais la même chose est vraie pour les propriétés)

class Foo
{
    public void Bar()
    {

    }
    public virtual void  virtualBar()
    {

    }
}

alors le framework fictif crée probablement quelque chose comme ça pour se moquer

public class MockFoo : Foo
{
    public override void virtualBar()
    {
        // mockery action
    }

    public new void Bar()
    {
        // mockery action
    }
}

Maintenant, quand vous avez

Foo foo = GetMockObject(); // you get an instance of MockFoo

maintenant lorsque vous appelez

foo.Bar();

vous n'avez pas l'intention qu'il appelle l'implémentation réelle, mais comme il s'agit d'un membre non virtuel, il appellera le Foo du Bar()

d'autre part, appeler

foo.VirtualBar();

appellerait MockFoo de VirtualBar() car c'est un membre virtuel qui aurait le comportement injecté par le framework fictif comme demandé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top