À l'aide de Moq pour se Moquer un Func<> paramètre du constructeur et Vérifier qu'il a été appelé deux fois
Pris la question à partir de cet article (Comment moq un Func) et adapté comme la réponse n'est pas correcte.
public class FooBar
{
private Func<IFooBarProxy> __fooBarProxyFactory;
public FooBar(Func<IFooBarProxy> fooBarProxyFactory)
{
_fooBarProxyFactory = fooBarProxyFactory;
}
public void Process()
{
_fooBarProxyFactory();
_fooBarProxyFactory();
}
}
J'ai besoin de simuler une touche Func<> qui est passé en paramètre du constructeur, l'assertion que la touche func était d'appeler deux fois.
En essayant de se moquer de la fonction var funcMock = new Mock<Func<IFooBarProxy>>();
Moq pose et d'exception comme la touche Func type n'est pas mockable.
Le problème est que, sans se moquer de la touche func il n'est pas possible de vérifier que la touche func a été appelé (n) fois. funcMock.Verify( (), Times.AtLeast(2));
- Moq prend désormais en charge ce que l'OP a été à l'origine d'essayer de faire, à voir la réponse de @ktam33
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas qu'il est nécessaire d'utiliser une maquette pour la touche Func.
Vous pouvez simplement créer un Func vous-même qui renvoie à un simulacre de
IFooBarProxy
:À tout le moins au Moq 4.5.28, vous pouvez vous moquer et de vérifier la touche Func comme vous pouvez vous attendre à être en mesure de. Je ne pouvais pas dire si cette fonctionnalité a été ajoutée (en fonction de la question d'origine à un certain point, cela ne fonctionne pas).
Depuis Moq v4.1.1308.2120
Que de cette version, qui a été publié quelques mois après que cette question a été posée (21 Août 2013), la fonctionnalité permettant de simuler une
Func<>
a été ajouté. Donc, avec toute version actuelle de fantaisie, vous pouvez utiliservar funcMock = new Mock<Func<IFooBarProxy>>();
.D'origine (obsolète) réponse
Si vous avez beaucoup de rappel
Func
's,Actions
, etc, il est préférable de définir une aide de l'interface dans vos tests et des simulations de cette interface. De cette façon, vous pouvez utiliser le Moq fonctionnalités, comme la mise en place des valeurs de retour des tests arguments d'entrée, etc.Utilisation