2013-04-20 6 views
9

में अभिव्यक्ति निर्दिष्ट करें मैं अपने इंटरफेस पर एक विधि है कि तरह दिखता है:Moq - भंडार में Linq अभिव्यक्ति - सेटअप

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

मैं इस तरह सेटअप कुछ (मुझे पता है यह नहीं है उपहास करने के लिए कोशिश कर रहा हूँ काम कर रहा है):

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

मुझे एहसास है कि मैं सेटअप में गलत पैरामीटर में गुजर रहा हूं।
this answer पढ़ने के बाद मैं इसे अभिव्यक्ति में गुजर, इस तरह से काम करना आरंभ कर सकते हैं: अगर मैं किसी भी अभिव्यक्ति के साथ GetSingle विधि कॉल

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

हालांकि, इसका मतलब यह है, एक ही परिणाम दिया जाता है।

क्या सेटअप में निर्दिष्ट करने का कोई तरीका है, किस अभिव्यक्ति का उपयोग करना है?

उत्तर

3

आप एक सामान्य सेट अप कोई आपत्ति नहीं है, तो वह ऐसा सरल हो सकता है।

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

मुझे नहीं पता कि यह प्रश्न का उत्तर कैसे देता है। पूछताछकर्ता ने विशेष रूप से कहा कि वह एक सामान्य अभिव्यक्ति का उपयोग करने से बचना चाहता था। –

+0

मेरी याददाश्त थोड़ा अस्पष्ट है, लेकिन मूल प्रश्न अभिव्यक्ति स्वीकार करने वाली विधि का मज़ाक उड़ा रहा था। मुझे लगता है कि एलेक्स ने सवाल को अद्यतन किया, क्योंकि वह दिए गए अभिव्यक्ति के आधार पर अलग-अलग परिणाम वापस करना चाहता है। – Andy

+0

एक संभावित कहानी;) –

7

मैं इस काम करने के लिए पाने में कामयाब रहे:

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); 
संबंधित मुद्दे