2011-08-10 17 views
38

पर मोक मॉक-ऑब्जेक्ट पास करना मैं एक अच्छा समय के लिए राइनोमोक्स का उपयोग कर रहा हूं, लेकिन बस मोक में देखना शुरू कर दिया। मेरे पास यह बहुत ही बुनियादी समस्या है, और यह मुझे आश्चर्यचकित करता है कि यह बॉक्स के ठीक बाहर नहीं उड़ता है। मान लें मैं निम्नलिखित वर्ग परिभाषा है:कन्स्ट्रक्टर

public class Foo 
{ 
    private IBar _bar; 
    public Foo(IBar bar) 
    { 
     _bar = bar; 
    } 
    .. 
} 

अब मैं एक परीक्षण है जहाँ मैं Ibar कि फू को भेजने के उपहास करने के लिए की जरूरत है। RhinoMocks में मैं यह बस करना होगा इस प्रकार की तरह, और यह सिर्फ महान काम करेगा:

var mock = MockRepository.GenerateMock<IBar>(); 
var foo = new Foo(mock); 

हालांकि, Moq में यह एक ही तरीके से काम करने के लिए प्रतीत नहीं होता। मैं इस प्रकार कर रहा हूँ:

var mock = new Mock<IBar>(); 
var foo = new Foo(mock); 

हालांकि, अब यह विफल रहता है - मुझे बता " 'Ibar' मैं गलत क्या कर रहा हूँ करने के लिए 'Moq.Mock' से कनवर्ट नहीं कर सकता ऐसा करने का अनुशंसित तरीका क्या है।? MOQ के साथ?

उत्तर

67

आप नकली

var mock = new Mock<IBar>(); 
var foo = new Foo(mock.Object); 

की वस्तु उदाहरण तुम भी उदाहरण के तरीकों का उपयोग करने की नकली वस्तु का उपयोग कर सकते के माध्यम से पारित करने की जरूरत है।

mock.Object.GetFoo(); 

moq docs

14
var mock = new Mock<IBar>().Object 
+0

+1 जवाब यह है कि स्वीकार कर लिया हो जाएगा के पीछे केवल 10 सेकंड के लिए किया जा रहा। धन्यवाद! – stiank81

+2

मैं सामान्य रूप से इस तरह के चर के लिए ऑब्जेक्ट आवृत्ति असाइन नहीं करता क्योंकि आप विशिष्ट व्यवहार के लिए नकली सेट करना चाहते हैं। – skyfoot

+0

यह सिर्फ दिखाने के लिए था। ऑब्जेक्ट जो रन-टाइम त्रुटि का समाधान था :-) –

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