2013-04-20 7 views
9

ich eine Methode auf meine Schnittstelle haben, die wie folgt aussieht:Moq - Linq Ausdruck in Repository - Geben Ausdruck im Setup

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

Ich versuche, das Setup etwas zu verspotten (Ich weiß, das ist nicht funktioniert):

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

Ich realisiere, dass ich den falschen Parameter zum Setup übergebe. zurück

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

Das bedeutet aber, wenn ich die GetSingle Methode mit jedem Ausdruck nennen, das gleiche Ergebnis:
Nach this answer Lese Ich kann es, indem man in der Expression, wie diese erhalten arbeiten.

Gibt es eine Möglichkeit, im Setup festzulegen, welcher Ausdruck verwendet werden soll?

Antwort

3

Wenn Sie eine generische Einrichtung nichts ausmacht, es kann so einfacher sein.

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

Ich sehe nicht, wie dies die Frage beantwortet. Der Fragesteller gab ausdrücklich an, dass er vermeiden wollte, einen generischen Ausdruck zu verwenden. –

+0

Mein Gedächtnis ist ein bisschen vage, aber die ursprüngliche Frage war, über die Methode zu spotten, die Ausdruck akzeptiert. Ich denke Alex hat die Frage aktualisiert, da er je nach gegebenem Ausdruck unterschiedliche Ergebnisse zurückgeben möchte. – Andy

+0

Eine wahrscheinliche Geschichte;) –

7

ich es geschafft, diese Arbeit zu bekommen:

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