2013-04-20 9 views
9

Mam metodę w moim interfejsie, który wygląda tak:Moq - wyrażenie LINQ w repozytorium - Określanie ekspresji w konfiguracji

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

Próbuję mock coś takiego setup (zdaję sobie sprawę, to nie jest pracy):

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

Zdaję sobie sprawę, że przekazuję nieprawidłowy parametr do konfiguracji.
Po przeczytaniu this answer mogę dostać pracy, przekazując w wyrażeniu, na przykład:

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

Oznacza to jednak, gdybym wywołać metodę GetSingle z każdej wypowiedzi, ten sam wynik jest zwracany.

Czy istnieje sposób określenia w konfiguracji, jakiego Expression użyć?

Odpowiedz

3

Jeśli nie przeszkadza rodzajowe skonfigurowana, to może być prostsze w ten sposób.

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

Nie widzę odpowiedzi na pytanie. Pytający wyraźnie stwierdził, że chciał uniknąć użycia ogólnego wyrażenia. –

+0

Moja pamięć jest trochę niejasna, ale pierwotne pytanie dotyczyło kpiny z metody akceptującej wyrażenie. Myślę, że Alex zaktualizował pytanie, ponieważ chce zwrócić inny wynik w zależności od danego wyrażenia. – Andy

+0

Prawdopodobna historia;) –

7

udało mi się uzyskać to do pracy:

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); 
Powiązane problemy