2009-02-13 3 views
18

डालें क्योंकि हमारी फर्म में यूनिट परीक्षण का उपयोग नहीं किया जाता है, मैं अपने स्वयं के कोड का परीक्षण करने के लिए यूनिट को पढ़ रहा हूं। मैं कुछ वास्तव में बुनियादी इकाई परीक्षण के लिए मानक .net परीक्षण ढांचे का उपयोग कर रहा हूं।आईनेमरेबल्स

मेरा एक तरीका IEnumerable<string> देता है और मैं इसका आउटपुट जांचना चाहता हूं। इसलिए मैंने IEnumerable<string> को इसके खिलाफ परीक्षण करने की उम्मीद की। मैंने सोचा कि मुझे Assert.ArePartsEqual या ऐसा कुछ करने का तरीका माना गया है, लेकिन मुझे यह प्रतीत नहीं होता है।

तो संक्षेप में, मैं कैसे परीक्षण करूं यदि दो IEnumerable<string> में समान स्ट्रिंग हैं?

string[] x = { "abc", "def", "ghi" }; 
    List<string> y = new List<string>() { "abc", "def", "ghi" }; 

    bool isTrue = x.SequenceEqual(y); 

या बस:

+1

अच्छा रवैया और पेशेवरता के लिए +1 :) –

+0

वह: पी यह एक जूनियर प्रोग्रामर की बेहतर प्रशंसाओं में से एक है;) –

उत्तर

23

मुझे नहीं पता कि आप कौन से "मानक .NET परीक्षण ढांचे" का जिक्र कर रहे हैं, लेकिन यदि यह विजुअल स्टूडियो टीम सिस्टम यूनिट परीक्षण सामग्री है तो आप CollectionAssert का उपयोग कर सकते हैं।

आपका परीक्षण इस तरह होगा:

CollectionAssert.AreEqual(ExpectedList, ActualList, "..."); 

अद्यतन: मैं भूल गया CollectionAssert एक ICollection इंटरफ़ेस की जरूरत है, तो आप() यह संकलित करने के लिए प्राप्त करने के लिए ActualList.ToList फोन करना होगा। आईन्यूमेरेबल लौटाना एक अच्छी बात है, इसलिए केवल परीक्षणों के लिए इसे न बदलें।

+0

जो आईसीओलेक्शन लेता है, एक आईनेमरेबल नहीं ... इसलिए आपको इसे एक संग्रह में भी धक्का देना होगा ... –

+0

@Marc Gravell, आप सही हैं .. मैं इसे "उत्तर" में जोड़ दूंगा –

11

आप SequenceEqual() विस्तार विधि (LINQ) चाहते

bool isTrue = x.SequenceEqual(new[] {"abc","def","ghi"}); 

(अगर वे समान नहीं हैं, या किसी भी आइटम अलग है यह अवास्तविक लौटाते हैं)

+0

इसलिए यूनिट परीक्षण के लिए इसे कुछ अनुवाद करने के लिए मैं Assert.IsTrue (परिणाम। SequenceEqual (उम्मीद)); यह एक सहायक संदेश नहीं प्रदान करता है, लेकिन यह मुझे वहां ले जाता है तो यह ठीक है। –

+0

@boris: एमएस संस्करण में मेरे (वर्तमान में NUnit- आधारित) कोड का अनुवाद करना वास्तव में आसान होगा। फिर आपको एक अच्छा संदेश मिलता है। –

+0

हां, मैंने इसे देखा था। मैं वर्तमान में यूनिट परीक्षण के साथ प्रयोग करने के लिए समय में थोड़ा सा लॉक कर रहा हूं क्योंकि मैं इसे बिना किसी अपरिचित (ओपी देखें) कर रहा हूं। लेकिन मैं उनमें से कुछ में निचोड़ने की कोशिश करूंगा। –

5

मेरे पास इसका एक उदाहरण है जिसका उपयोग मैंने "60 मिनट में ऑब्जेक्ट्स को कार्यान्वित करने के लिए LINQ लागू करने" के लिए किया था।

यह मेरे MoreLinq प्रोजेक्ट में भी है। यहां इसे देखने की कोशिश करने के बाद, यह बहुत डरावना है। बस grab from Github ...

+0

Google कोड लिंक टूटा हुआ है, यहां कोई काम करता है: https://code.google.com/p/morelinq/source/browse/MoreLinq.Test/TestExtensions.cs – vvnurmi

+0

@vvnurmi: आह, svn से hg में कनवर्ट करने की खुशी :) लिंक संपादित करेंगे। –

+0

github में स्थानांतरित किया गया: https://github.com/morelinq/MoreLINQ/blob/master/MoreLinq.Test/TestExtensions.cs – MKesper