Se faccio questo:È possibile (con Moq) interrompere le chiamate di metodo con i parametri Lambda?
var repository = new Mock<IRepository<Banner>>();
repository.Setup(x => x.Where(banner => banner.Is.AvailableForFrontend())).Returns(list);
"Dove" è un metodo sul mio repository che prende un Func<T, ISpecification<T>
. AvailableForFrontend restituisce un'implementazione di ISpecification e l'elenco è un IEnumberable del tipo generico del repository.
Compilano bene, ma ottengo il seguente errore quando eseguo i miei test.
---- System.NotSupportedException : Expression banner => Convert((banner.Is.AvailableForFrontend() & banner.Is.SmallMediaBanner())) is not supported.
se uso il mio altro sovraccarico Qualora, in repository che porta direttamente a ISpecification, non c'è nessun problema.
Quindi la domanda del mio debuttante/Moq per principianti è: Posso stubare una chiamata di metodo con un parametro lamdba? O dovrei fare questo in un altro modo?
+1 che è stato esattamente quello che mi serviva. Grazie. – Luhmann
Che dire di verificare che un metodo sia stato chiamato con un'espressione lambda specifica come parametro? E 'possibile con Moq? repository.Verify (x => x.Where (banner => banner.Is.AvailableForFrontend())); –
sì, è possibile se si specifica che è verificabile durante la configurazione. repository .setup (x => x.Where (It.IsAny>()) .Returns (elenco) .Verifiable(); ecco il link a un setup verificare esempio utilizzando moq: http://dotnet.dzone.com/news/beginning-mocking-moq-3-part-3 –
darthjit