2011-07-12 7 views
6

मैं अपने एनयूनीट परीक्षण मामलों में Moq का उपयोग कर रहा हूं। मदद के लिएमैं इस Moq त्रुटि को कैसे हल करूं? System.Reflection.TargetParameterCountException: पैरामीटर गिनती मिस्चैच

public class ChartFieldDomainService : IChartFieldDomainService 
{ 
    private IChartFieldRepository _chartFieldRepository = null; 

    public ChartFieldDomainService(IChartFieldRepository repository) 
    { 
     _chartFieldRepository = repository; 
    } 

    public virtual IQueryable<ChartFieldDepartment> RetrieveChartFieldDepartments() 
    { 
     return _chartFieldRepository.RetrieveChartFieldDepartments(true); // always refresh, get latest 
    } 
    //.... 
} 

धन्यवाद:

 IList<ChartFieldDepartment> coaDepartments = new List<ChartFieldDepartment>() { 
       new ChartFieldDepartment { ChartFieldKey="1000", Description="Corporate Allocation"}, 
       new ChartFieldDepartment { ChartFieldKey="1010", Description="Contribution to Capital"} 
     }; 

     Mock<IChartFieldRepository> mockChartFieldRepository = new Mock<IChartFieldRepository>(); 
     mockChartFieldRepository.Setup(x => x.RetrieveChartFieldDepartments(It.IsAny<bool>())).Returns(coaDepartments.AsQueryable); 

     ChartFieldDomainService chartFieldDomainService = new ChartFieldDomainService(mockChartFieldRepository.Object); 

     // this line fails! I get System.Reflection.TargetParameterCountException : Parameter count mismatch 
     IQueryable<ChartFieldDepartment> departments = chartFieldDomainService.RetrieveChartFieldDepartments(); 

यहाँ है मेरी ChartFieldDomainService:

यहाँ मेरी परीक्षण का मामला लग रहा है क्या की तरह है।

संपादित करें: समाधान

वाक्य रचना में निम्नलिखित परिवर्तन समस्या तय।

मूल पंक्ति:

 mockChartFieldRepository.Setup(x => x.RetrieveChartFieldDepartments(It.IsAny<bool>())) 
      .Returns(coaDepartments.AsQueryable()); 

अपडेट किया गया पंक्ति:

 mockChartFieldRepository.Setup(x => x.RetrieveChartFieldDepartments(It.IsAny<bool>())) 
      .Returns((bool x) => coaDepartments.AsQueryable()); 
+0

(जो त्रुटि संदेश से बिल्कुल भी स्पष्ट नहीं है।) मुझे नहीं लगता कि आपको लैम्ब्डा की जरूरत है; बस कोष्ठक जोड़ें। – TrueWill

उत्तर

11

बदलें यह

.Returns(coaDepartments.AsQueryable()); 

को

+1

यही समस्या है जो पहली जगह में समस्याएं पैदा कर रही है। लैम्ब्डा (बूल एक्स) => कोआडेपार्टमेंट्स जोड़ना। एक्साक्टेबल() पैरामीटर मेल नहीं खाता था। – Raymond

+1

@ रेमंड: हमें बस अपनी मूल पोस्ट पर जाना है। पहला उदाहरण'Returns (coaDepartments.AsQueryable) दिखाता है। परीक्षण में, मैंने पाया कि यह बिना किसी कोष्ठक के चलाएगा लेकिन ब्रांड्स के साथ भाग जाएगा। – TrueWill

+2

@TrueWill मैं इस त्रुटि को थोड़ी देर के लिए देख रहा था बिना महसूस किए कि मैं भूल गया था()। उन्हें जोड़ने से मेरी समस्या हल हो गई। – Andy

संबंधित मुद्दे