2009-05-22 10 views
70

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

जावा में, मैं assertArrayEquals (foo, bar); का उपयोग करूंगा, लेकिन ऐसा लगता है कि सी # के बराबर नहीं है। मैंने Assert.AreEqual(new string[]{"a", "b"}, MyFunc("ab")); की कोशिश की, लेकिन भले ही फ़ंक्शन "ए", "बी" के साथ एक सरणी लौटाता है, फिर भी चेक

अंतर्निहित इकाई परीक्षण ढांचे के साथ विजुअल स्टूडियो 2008 टीम सूट का उपयोग कर रहा है।

उत्तर

116

यह CollectionAssert.AreEqual है, documentation for CollectionAssert भी देखें।

+0

बस निम्नलिखित को ध्यान में रखें, http://stackoverflow.com/questions/5194966/mstest-collectionassert-Areequivalent-failed-the-expected-collection- वस्तुओं को स्पष्ट रूप से 'ऑब्जेक्ट' के साथ तुलना की जा सकती है। एक विफल दावा पारित करने के लिए 'IEqualityComparer 'को परिभाषित किया जाना पड़ सकता है। – atconway

+2

मेरी इच्छा है कि यह विफल होने पर अधिक विस्तृत संदेश दें। "तत्वों की विभिन्न संख्या" और "इंडेक्स 0 पर एलिमेंट मैच नहीं है" थोड़ा बेकार हैं। * तब वे क्या हैं?! * –

+0

'संग्रह एएसएसर्ट .अरेक्वाइवलेंट' (विजुअल स्टूडियो 2010 से उपलब्ध) अधिक जानकारीपूर्ण परिणाम देता है। उदाहरण के लिए, जब तत्वों की संख्या भिन्न होती है, तो संदेश अपेक्षित और तत्वों की वास्तविक संख्या – Dennie

3

.NET 3.5 में, शायद Assert.IsTrue(foo.SequenceEqual(bar)); पर विचार करें - यह आपको बताएगा कि यह किस सूचकांक में भिन्न है, हालांकि।

1

यहाँ ठीक है यह करने का एक थोड़ा लंबा रास्ता है ...

static void Main(string[] args) 
{ 
    var arr1 = new[] { 1, 2, 3, 4, 5 }; 
    var arr2 = new[] { 1, 2, 4, 4, 5 }; 

    Console.WriteLine("Arrays are equal: {0}", equals(arr1, arr2)); 
} 

private static bool equals(IEnumerable arr1, IEnumerable arr2) 
{ 

    var enumerable1 = arr1.OfType<object>(); 
    var enumerable2 = arr2.OfType<object>(); 

    if (enumerable1.Count() != enumerable2.Count()) 
     return false; 

    var iter1 = enumerable1.GetEnumerator(); 
    var iter2 = enumerable2.GetEnumerator(); 

    while (iter1.MoveNext() && iter2.MoveNext()) 
    { 
     if (!iter1.Current.Equals(iter2.Current)) 
      return false; 
    } 

    return true; 
} 
18

Class1.cs:


namespace ClassLibrary1 
{ 
    public class Class1 
    { 
     Array arr1 = new[] { 1, 2, 3, 4, 5 }; 
     public Array getArray() 
     { 
      return arr1; 
     } 
    } 
} 

ArrayEqualTest.cs:


     [TestMethod()] 
     public void getArrayTest() 
     { 
      Class1 target = new Class1(); 
      Array expected = new []{1,2,3,4,5}; 
      Array actual; 
      actual = target.getArray(); 
      CollectionAssert.AreEqual(expected, actual); 
      //Assert.IsTrue(expected.S actual, "is the test results"); 
     } 

टेस्ट सफलता, पाया त्रुटि:


    CollectionAssert.AreEqual failed. (Element at index 3 do not match.) 
+0

आपको बहुत धन्यवाद देता है! यह काम किया! – Paintrick

+0

अरे मैं दुर्घटना से इस उत्तर downvoted किया है और अब मैं अपने downvote पूर्ववत नहीं कर सकते - मुझे मिल गया "आपका वोट अब में लॉक हो गया है जब तक कि इस उत्तर संपादित किया जाता है" :( –

+0

इस उत्तर यह पहले साल से एक से बेहतर नहीं लगती है । – Konstantin

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