2013-04-20 5 views
9

Ho un metodo sul mio interfaccia che assomiglia a:Moq - espressione Linq nel repository - Specificare espressione nella messa a punto

T GetSingle(Expression<Func<T, bool>> criteria); 

sto cercando di prendere in giro il setup qualcosa di simile (mi rendo conto che questo non è funzionante):

_mockUserRepository = new Mock<IRepository<User>>(); 
_mockUserRepository.Setup(c => c.GetSingle(x => x.EmailAddress == "[email protected]")) 
    .Returns(new User{EmailAddress = "[email protected]"}); 

Mi rendo conto che sto passando il parametro sbagliato al setup.
Dopo aver letto this answer posso farlo funzionare passando l'espressione, in questo modo:

_mockUserRepository.Setup(c => c.GetSingle(It.IsAny<Expression<Func<User, bool>>>()) 
    .Returns(new User{EmailAddress = "[email protected]"}); 

Tuttavia, questo significa che se chiamo il metodo GetSingle con qualsiasi espressione, lo stesso risultato viene restituito.

C'è un modo per specificare nell'impostazione, quale espressione utilizzare?

risposta

3

Se non ti dispiace un generico insieme up, può essere più semplice come questo.

_mockUserRepository.Setup(c => c.GetSingle(It.IsAny<Expression<Func<User, bool>>>())) 
    .Returns(new User { EmailAddress = "[email protected]" }); 
+3

Non vedo come questo risponda alla domanda. Il richiedente specificò espressamente che voleva evitare di usare un'espressione generica. –

+0

La mia memoria è un po 'vaga, ma la domanda iniziale era di prendere in giro il metodo che accetta l'espressione. Penso che Alex abbia aggiornato la domanda, poiché vuole restituire risultati diversi a seconda dell'espressione data. – Andy

+0

Una storia probabile;) –

7

sono riuscito ad ottenere questo lavoro:

Expression<Func<User, bool>> expr = user => user.EmailAddress == "[email protected]"; 

_mockUserRepository.Setup(c => c.GetSingle(It.Is<Expression<Func<User, bool>>>(criteria => criteria == expr))) 
    .Returns(new User { EmailAddress = "[email protected]" }); 

User result = _mockUserRepository.Object.GetSingle(expr); 
Problemi correlati