2013-02-25 77 views
8

हाय मैं Moq परीक्षण के लिए नया हूं और एक सरल दावा करने के लिए कठिन समय है। मैं एक अंतरफलकMoq परीक्षण शून्य विधि

public interface IAdd 
{ 
    void add(int a, int b); 
} 

Moq उपयोग कर रहा हूँ IAdd इंटरफ़ेस के लिए है:

Mock<IAdd> mockadd = new Mock<IAdd>(); 
    mockadd.Setup(x => x.add(It.IsAny<int>(), It.IsAny<int>()).callback((int a, int b) => { a+b;}); 
    IAdd testing = mockadd.Object; 

के बाद से add विधि शून्य है, इसके साथ का दावा करने के लिए किसी भी मूल्य वापस नहीं करता है। मैं इस सेटअप को कैसे जोर दे सकता हूं?

+2

आप परीक्षण करने की कोशिश कर रहे हैं? – GolfWolf

+0

मैं उस विधि को जांचने की कोशिश कर रहा हूं लेकिन इसमें कोई रिटर्न प्रकार नहीं है। अगर यह वापसी प्रकार के रूप में int था, तो मैं Assert.AreEqual (mockadd.add (2,2), 4) का परीक्षण किया जाएगा; लेकिन बिना वापसी के प्रकार मैं ऐड विधि का परीक्षण कैसे करूं। –

+2

** 1। ** इंटरफेस (या नकली कार्यान्वयन) का परीक्षण करने का कोई मतलब नहीं है। ** 2। ** यदि आपके पास ऐसी कक्षा है जो कुछ की गणना करती है, तो आप परिणाम किसी भी तरह उपलब्ध कर सकते हैं (या तो वापसी मूल्य या उस वस्तु पर कुछ संपत्ति के माध्यम से) – GolfWolf

उत्तर

14

बेहतर अधिक सामग्री प्रदान करने, लेकिन आम तौर पर इसे इस तरह इस्तेमाल किया:

var mockAdd = new Mock<IAdd>(); 
mockAdd.Setup(x => x.Add(1, 2)).Verifiable(); 

//do something here what is using mockAdd.Add 

mockAdd.VerifyAll(); 
+0

पावेल, क्या आप mockAdd.Add का उपयोग कर रहा है, यहां कुछ करने के बारे में कुछ और बता सकते हैं। जोड़ें। मैं एक समान समस्या पर फंस गया हूं और यह सुनिश्चित नहीं करता कि "// कुछ ऐसा करें जो mockAdd का उपयोग कर रहा है। जोड़ें" – Maddy

18

क्यों मजाक किया जाता है? यह सत्यापित करने के लिए प्रयोग किया जाता है कि SUT (परीक्षण के तहत सिस्टम) इसकी निर्भरताओं के साथ सही ढंग से बातचीत करता है (जिसे मजाक किया जाना चाहिए)। सही बातचीत का अर्थ सही निर्भरता वाले सदस्यों को सही मानकों के साथ बुला रहा है।

आपको नकली द्वारा लौटाए गए मूल्य पर कभी भी जोर नहीं देना चाहिए। वह डमी वैल्यू है जिसका उत्पादन कोड से कोई संबंध नहीं है। आपको केवल एक ही मूल्य पर जोर देना चाहिए जो एसयूटी द्वारा लौटाया गया मूल्य है। SUT एकमात्र चीज है जिसके लिए आपको दावे लिखना चाहिए।

इसके अलावा, आप इंटरफेस परीक्षण कभी नहीं करना चाहिए। क्योंकि परीक्षण करने के लिए कुछ भी नहीं है। इंटरफेस सिर्फ एक एपीआई विवरण है। इसका कोई कार्यान्वयन नहीं है। तो, रुको और सोचें कि आप किस कोड का परीक्षण कर रहे हैं? क्या यह एक वास्तविक कोड है, जो आपके आवेदन में निष्पादित है?

तो, आपको केवल IAdd इंटरफ़ेस का उपयोग करने वाले ऑब्जेक्ट का परीक्षण करने के लिए IAdd इंटरफ़ेस का नकल करना चाहिए।

+0

हाय सर्गेई, मैं इस नकली परीक्षणों पर नया हूं। मैं निष्पादित करने के लिए शून्य विधि से बचना चाहता हूं, विधि डेटाबेस को अद्यतन करती है, क्या ऐसा करने का बेहतर तरीका है? –