56 votes

Mocking des propriétés virtuelles en lecture seule avec moq

Je n'ai pas trouvé de moyen de le faire, bien que cela puisse être fait à la main, alors pourquoi pas avec moq ?

98voto

Mark Seemann Points 102767

Compte tenu de cette classe

public abstract class MyAbstraction
{
    public virtual string Foo
    {
        get { return "foo"; }
    }
}

vous pouvez configurer Foo (une propriété en lecture seule) comme suit :

var stub = new Mock<MyAbstraction>();
stub.SetupGet(x => x.Foo).Returns("bar");

stub.Object.Foo renverra désormais "bar" au lieu de "foo".

0 votes

En d'autres termes, il est préférable de ne pas avoir de propriétés "getter-only" parce qu'elles sont difficiles à simuler ?

0 votes

J'ai un certain nombre de propriétés en lecture seule : drive.google.com/file/d/0ByqKtGmtuLzZNFhwTWhMMGVRZnc/ et j'essaie d'utiliser leur classe mère comme système sous test, donc je ne suis pas sûr de la façon dont je configurerais le moq, puisque le système sous test n'est pas une classe mockée, alors que je veux forcer une valeur à partir de ces getters.

1 votes

@l--''''''---------'''''''''''' Une propriété get-only n'est que du sucre syntaxique par rapport à une méthode, donc si vous prenez cette affirmation à sa conclusion logique, vous diriez qu'il vaut mieux ne pas avoir de méthodes qui renvoient des données. Je ne suis pas du tout d'accord avec cela.

2voto

user14403065 Points 21

Vous devez vous assurer que la propriété est virtuelle pour que cela fonctionne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X