2010-07-05 13 views
22

मैं टेस्ट संचालित विकास सीख रहा हूं और मॉकिंग के लिए एमओसी लाइब्रेरी का उपयोग करने की कोशिश कर रहा हूं। मॉक क्लास की सेटअप विधि का उद्देश्य क्या है?नकली वस्तुओं - सेटअप विधि - टेस्ट संचालित विकास

उत्तर

7

सेटअप विधि नकली वस्तु पर अपेक्षाएं निर्धारित करने के उदाहरण के लिए प्रयोग किया जाता है:

mock.Setup(foo => foo.DoSomething("ping")).Returns(true); 

यहाँ आप नकली वस्तु पर DoSomething विधि की स्थापना कर रहे हैं। आप कह रहे हैं, जब पैरामीटर "पिंग" होता है, तो विधि सही होती है।

अब यह ऑब्जेक्ट आपके उपयोग के आधार पर एक नकली या स्टब के रूप में कार्य कर सकता है। यदि आप इसे राज्य आधारित परीक्षण में उपयोग करना चाहते हैं, तो यह एक स्टब के रूप में कार्य कर सकता है। यदि आप व्यवहार आधारित परीक्षण में इसका उपयोग करना चाहते हैं, तो यह एक नकली के रूप में कार्य कर सकता है। व्यवहार परीक्षण में, आप नकली वस्तु पर विधि की पुष्टि कॉल करेंगे बात पर जोर देना है कि विधि "पिंग" पैरामीटर के साथ

इसके अलावा उल्लेख इन कड़ियों बुलाया गया था:

http://martinfowler.com/articles/mocksArentStubs.html

http://code.google.com/p/moq/wiki/QuickStart

32

एक Moq Mock ऑब्जेक्ट का डिफ़ॉल्ट व्यवहार सभी विधियों और गुणों को स्टब करना है। इसका अर्थ यह है कि किसी भी पैरामीटर के साथ उस विधि/प्रॉपर्टी पर कॉल विफल नहीं होगा और विशेष रिटर्न प्रकार के लिए डिफ़ॉल्ट मान वापस कर देगा।

  • आप विधि के लिए इनपुट मानों को प्रतिबंधित करना चाहते:

    आप किसी भी या निम्न कारणों से सभी के लिए Setup विधि कॉल।

public interface ICalculator { 
    int Sum(int val1, val2); 
} 

var mock = new Mock<ICalculator>(); 
mock.Setup(m=>m.Sum(
    It.IsAny<int>(), //Any value 
    3    //value of 3 
)); 

ऊपर सेटअप val1 के लिए किसी भी मूल्य के साथ विधि Sum के लिए एक कॉल और के 3.

  • आप एक विशिष्ट मूल्य वापस करना चाहते val2 मूल्य से मेल खाएगी। ICalculator उदाहरण के अनुसार, निम्नलिखित सेटअप परवाह किए बिना 10 में मान प्रदान करेगा इनपुट पैरामीटर की:
var mock = new Mock<ICalculator>(); 
mock.Setup(m=>m.Sum(
    It.IsAny<int>(), //Any value 
    It.IsAny<int>() //Any value 
)).Returns(10); 
  • आप आप सेट अप के बाद Mock<T>.VerifyAll() उपयोग करने के लिए सत्यापित करें कि सभी पिछले सेटअप बुलाया गया है चाहता हूँ (एक बार)।
var mock = new Mock<ICalculator>(); 
mock.Setup(m=>m.Sum(
    7, //value of 7 
    3    //value of 3 
)); 

mock.Setup(m=>m.Sum(
    5, //value of 5 
    3    //value of 3 
)); 

mock.VerifyAll();  

ऊपर कोड पुष्टि करता है कि Sum दो बार कहा जाता है। एक बार (7,3) और (5,3) के साथ।

+1

मुझे एहसास नहीं हुआ कि कोई भी कई अलग-अलग पैरामीटर सेट अप करने के लिए बस एक से अधिक बार सेटअप() को कॉल कर सकता है, और यह एकमात्र ऐसा स्थान है जिसे मैंने देखा है। –

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