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?
+1 C'était exactement ce qu'il me fallait. Merci. – Luhmann
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())); –
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