2010-02-09 12 views
6

Si je fais ceci:Est-il possible (avec Moq) de boucher les appels de méthode avec les paramètres Lambda?

var repository = new Mock<IRepository<Banner>>(); 
repository.Setup(x => x.Where(banner => banner.Is.AvailableForFrontend())).Returns(list); 

« Où » est une méthode sur mon dépôt qui prend Func<T, ISpecification<T>. AvailableForFrontend renvoie une implémentation de ISpecification, et list est un IEnumberable du type générique du référentiel.

Il se compile bien, mais j'obtiens l'erreur suivante lorsque j'exécute mes tests.

---- System.NotSupportedException : Expression banner => Convert((banner.Is.AvailableForFrontend() & banner.Is.SmallMediaBanner())) is not supported. 

Si j'utilise mon autre surcharge de cas sur le référentiel qui prend ISpecification directement, theres aucun problème. Donc, ma question de débutant mock/Moq est: Puis-je remplacer un appel de méthode avec un lamdba en tant que paramètre? Ou devrais-je m'y prendre autrement?

Répondre

10

Avez-vous essayé la syntaxe suivante:

repository.Setup(x => x.Where(It.IsAny<Func<T, ISpecification<T>>()).Returns(list); 
+0

+1 C'était exactement ce qu'il me fallait. Merci. – Luhmann

+0

Qu'en est-il de vérifier qu'une méthode a été appelée avec une expression lambda spécifique en tant que paramètre? Est-ce possible avec Moq? repository.Verify (x => x.Where (bannière => banner.Is.AvailableForFrontend())); –

+0

oui vous pouvez si vous spécifiez qu'il est vérifiable lors de la configuration. dépôt .Setup (x => x.Where (It.IsAny >()) .Retour (liste) .Verifiable(); ici le lien vers une installation vérifier exemple utilisant moq: http://dotnet.dzone.com/news/beginning-mocking-moq-3-part-3 – darthjit