2012-02-05 12 views
10

मूल विधि है जिसे मैंने अभी भी Moq का उपयोग करने का प्रयास किया है। यहाँ मेरी कोड है:Moq सेटअप काम नहीं कर रहा है, मूल विधि अभी भी

var mockedBetRepository = new Mock<BetRepository>(new FakeSiteContext()); 
mockedBetRepository.CallBase = true; 
Bet bet = new Bet(); 
mockedBetRepository.Setup<Bet>(m => m.UpdateBet(bet)).Returns(bet); 

betRepository = mockedBetRepository.Object; 

कोड में बाद में, betRepository.UpdateBet(bet) कहा जाता है, लेकिन इसकी नहीं मेरी मज़ाक उड़ाया विधि है जो कहा जाता हो जाता है, बजाय, वर्ग की विधि कहा जाता हो जाता है:

public virtual Bet UpdateBet(Bet betToUpdate) 
{ 
    siteContext.Entry(betToUpdate).State = System.Data.EntityState.Modified; 
    siteContext.SaveChanges(); 
    return betToUpdate; 
} 

क्यों हो रहा ?

उत्तर

8

मुझे समस्या मिली है।

तो मैं बदलने के

Bet bet = new Bet(); 
mockedBetRepository.Setup<Bet>(m => m.UpdateBet(bet)).Returns(bet); 

इस

mockedBetRepository.Setup<Bet>(m => m.UpdateBet(It.IsAny<Bet>())).Returns((Bet b) => b); 

साथ तो यह काम करता है।

+0

क्या आप उसी संदर्भ का उपयोग कर रहे हैं जब आप विधि को सेटअप करते हैं जैसा कि वास्तव में कहा जाता है? ऐसा इसलिए है जो आप देख रहे व्यवहार को समझाएंगे, क्योंकि मोक का उपयोग यह जांचने के लिए किया जा सकता है कि सत्यापन के दौरान उस विशिष्ट मान का उपयोग किया गया था। संदर्भ प्रकारों के लिए, यह आपके ऑब्जेक्ट के विशिष्ट उदाहरण होंगे। – Andy

+0

हाँ, शायद यह था। पता नहीं था कि मोजे इतने अनन्य और स्पष्ट थे। – ErikTJ

0

आपकी सेटिंग कॉलबेस सही है, जो आपके वास्तविक कार्यान्वयन को कॉल करेगा।

+0

हां, यह आधार कार्यान्वयन को कॉल करेगा "अगर कोई सेटअप नहीं हुआ है", जो मैं देख सकता हूं, वहां है? – ErikTJ

+0

@ErikTJ और क्या आपने इसे CallBase = true के बिना आजमाया? – Andy

+0

मुझे समाधान मिला है, मेरा जवाब देखें। कॉलबेस = झूठी सेटिंग भी संभव नहीं है क्योंकि मुझे केवल कई तरीकों का नकल करने की आवश्यकता है। – ErikTJ

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