2012-10-31 16 views
5

के साथ मोर्चिंग फ़ोरैच लूप I XmlNodeList throug को लूप करना चाहता हूं। आप Moq में एक XmlNodeList कैसे नकली है, इसलिए यदि आप एक foreach पाश में है जैसे कि यह माध्यम से लूप कर सकते हैं:मोक

 foreach (XmlNode xmlNode in nodes) 
     { 
      //Do something with node 
     } 

मैं एक SetupSequence विधि के माध्यम से स्थापित करने के लिए कोशिश की है, लेकिन मैं बनाने के लिए नहीं कर पाए हैं वांछित नकली

+1

यह समझना थोड़ा मुश्किल है कि आप इस परीक्षण के माध्यम से क्या हासिल करने की कोशिश कर रहे हैं, हालांकि आप यूनिट परीक्षण की बजाय यहां एकीकरण परीक्षण करने पर विचार करना चाहेंगे, अपने एक्सएमएल का एक स्ट्रिंग प्रतिनिधित्व प्रदान कर सकते हैं और अपने लूप का परीक्षण वास्तविक पर कर सकते हैं डेटा। – nieve

+0

आप मेरे बारे में उस ग्रे क्षेत्र में होने के बारे में सही हैं, जहां आप एक वास्तविक इकाई परीक्षण के मूल्य पर चर्चा कर सकते हैं। हालांकि, यह अन्य भूरे रंग के क्षेत्रों में उपयोगी नहीं हो सकता है। क्या मैं सभी foreach loops के साथ एक ही समस्या में भाग नहीं होगा? – Morten

+0

अंतर यह है कि आप किस पर लूपिंग कर रहे हैं- एक एक्सएमएल दस्तावेज़ किसी भी अन्य संग्रह की तुलना में अधिक जटिल है और इसलिए एक साधारण इकाई परीक्षण के लिए सबसे अच्छा उम्मीदवार नहीं हो सकता है, जाहिर है कि आप वास्तव में परीक्षण करने की कोशिश कर रहे हैं। साथ ही, यह प्रश्न आपके डिजाइन पर पुनर्विचार करने के लिए एक अच्छा संकेतक हो सकता है? सिर्फ एक विचार। – nieve

उत्तर

9
हुड के नीचे

foreach कॉल GetEnumerator और वह है क्या आपका उपहास करने की जरूरत है:

var xmlNodesMock = new Mock<XmlNodeList>(); 
xmlNodesList 
    .Setup(l => l.GetEnumerator()) 
    .Returns(new XmlNode[] { /* values go here */ }.GetEnumerator()); 

स्वाभाविक रूप से आप वास्तविक मूल्यों के साथ Returns विधि में XmlNode सरणी प्रारंभ करने की जरूरत है। ध्यान रखें कि नकली सूची को परीक्षण विधि में इंजेक्शन देना है, ताकि आप वास्तविक कार्यान्वयन को प्रतिस्थापित कर सकें।

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