2011-09-19 2 views
5

मैं सी #, एंटिटीफ्रेमवर्क 4 और मोक 4 के साथ .NET 4 का उपयोग कर रहा हूं। मैं अपने यूनिटऑफवर्क, रिपोजिटरी और अंत में एक विधि कॉल का मज़ाक उड़ा रहा हूं।यूनिवर्सोफवर्क रिपोजिटरी के साथ लैम्ब्डा मॉकिंग की समस्या

  T GetFirst(Expression<Func<T, bool>> query = null, 
     Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null); 

CField:

यहाँ कोड

 var unitOfWorkMock = new Mock<UnitOfWork>(); 
     var cFieldRepositoryMock = new Mock<IRepository<CField>>(); 

     System.Linq.Expressions.Expression<Func<CField, bool>> query = (x) => x.CID == c && x.FID == parentFID; 

     cFieldRepositoryMock.Setup(x => x.GetFirst(query)); 

GetFirst हस्ताक्षर विधि के साथ मैं मुसीबत हो रहा है

public class CField 
{ 
    public CField() 
    { 
     //do stuff 
    } 
    public int ID { get; set; } 
    public int FID { get; set; } 
    public int CID { get; set; } 
} 

क्या मैं होने की अपेक्षा: मैं मैं उम्मीद कर रहा हूं कि wheh मैं अपने cFieldRepositoryMock की GetFirst विधि को कॉल करता हूं, यह matc होगा एच लैम्ब्डा अभिव्यक्ति मैं सेटअप में परिभाषित अभिव्यक्ति के खिलाफ पास करता हूं।

क्या हो रहा है: मैं सेटअप काम पर एक संकलक त्रुटि हो रही है:

मैं स्पष्ट रूप से कुछ गलत कर रहा हूँ "अभिव्यक्ति पेड़ एक फोन या मंगलाचरण वैकल्पिक तर्क का उपयोग करता है शामिल नहीं हो सकता", मैं कर रहा हूँ बस यकीन नहीं है कि क्या। किसी भी सलाह की सराहना की जाती है, मैं यूनिट परीक्षण के लिए बिल्कुल नया हूं।

धन्यवाद! AFrieze

+0

आप पोस्ट कर सकते हैं घोषणा अगर सीएफआईल्ड और getfirst (विधि) के विधि हस्ताक्षर? – David

+0

हाय डेविड, मैंने अनुरोध की गई जानकारी को जोड़ा। मैं पूरी सीएफआईल्ड कक्षा पोस्ट करने में असमर्थ हूं इसलिए मैंने प्रासंगिक क्षेत्रों को सही प्रकार और पहुंच के स्तर के साथ पोस्ट किया। – AFrieze

+2

क्या आपने आदेश के लिए तर्क जोड़ने का प्रयास किया है (Arg.IsAny <...> या शून्य)? मुझे बिल्कुल नहीं पता लेकिन मुझे लगता है कि मोक अभिव्यक्तियों का उपयोग कर रहा है और मुझे लगता है कि आपको यहां * सभी * तर्क प्रदान करना होगा। – Carsten

उत्तर

8

eror आपको प्राप्त हो रही वास्तव में हो रहा है एक limitation of expressions:

इस तरह सामान unittest करने के लिए (के रूप में पहले से ही कार्स्टन सुझाव) It.IsAny उपयोग करने के लिए पर विचार करें:

cFieldRepositoryMock.Setup(x => x.GetFirst(query, It.IsAny<Func<IQueryable<CField>, IOrderedQueryable<CField>>>())); 
संबंधित मुद्दे