2010-02-09 11 views
6

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?

risposta

10

Hai provato la seguente sintassi:

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

+1 che è stato esattamente quello che mi serviva. Grazie. – Luhmann

+0

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())); –

+0

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

Problemi correlati