2010-12-10 16 views
18

मैं एक सामान्य विधि के साथ कुछ इंटरफेस और कोई पैरामीटर है मान लें:मजाक सामान्य तरीकों

public interface Interface { 
    void Method<T>(); 
} 

अब मैं इस वर्ग के लिए नकली (मैं Moq उपयोग कर रहा हूँ) को लागू करना चाहते हैं और मैं इस विधि नकली करना चाहते हैं कुछ ठोस प्रकार के लिए - मान लीजिए कि मैं Method<String>() कॉल का मज़ाक उड़ा रहा हूं।

mock = new Mock<Interface>(); 
mock.Setup(x => x.Method ????).Returns(String("abc")); 

???? के विचार स्पष्ट किया जाना चाहिए - यह लैम्ब्डा अभिव्यक्ति मामले को संभाल चाहिए जब Method<T> में T वास्तव में एक String है।

क्या वांछित व्यवहार प्राप्त करने का कोई तरीका है?

उत्तर

20

सीधे शब्दों में:

mock.Setup(x => x.Method<string>()).Returns("abc"); 

भी सुनिश्चित करें कि आपके विधि वास्तव में कुछ के रूप में वर्तमान में वापसी प्रकार void के रूप में परिभाषित किया गया है लौटाता हो:

public interface Interface 
{ 
    string Method<T>(); 
} 

class Program 
{ 
    static void Main() 
    { 
     var mock = new Mock<Interface>(); 
     mock.Setup(x => x.Method<string>()).Returns("abc"); 

     Console.WriteLine(mock.Object.Method<string>()); // prints abc 
     Console.WriteLine(mock.Object.Method<int>()); // prints nothing 
    } 
} 
+0

'स्ट्रिंग विधि 'टी विधि ' नहीं होना चाहिए? – Scott

+1

@ सेक्रेट एजेंट मैन, नहीं, यह नहीं होना चाहिए। कम से कम ऐसा कुछ भी नहीं है जो ऐसा करने के लिए बाध्य है। यह सिर्फ एक उदाहरण था जिसे मैंने लिया था। एक विधि जो भी आप चाहते हैं वापस कर सकते हैं। यदि आप चाहते हैं कि आप 't' के साथ 'स्ट्रिंग' रिटर्न प्रकार को प्रतिस्थापित कर सकें, तो उदाहरण अभी भी काम करेगा। –

5

मैं अपने आप को Moq उपयोग नहीं किया है, लेकिन मैं उम्मीद थी:

mock.Setup(x => x.Method<string>()); 

(नोट अपने नमूना विधि एक शून्य वापसी प्रकार है, तो यह कुछ भी वापस नहीं किया जाना चाहिए ...

+0

किस मामले में सेटअप अनावश्यक है क्योंकि नकली मोड में नकली बनाई गई है। –

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