Affirmer que les tableaux sont égaux dans le cadre de test de Visual Studio 2008

Existe-t-il un moyen facile de vérifier dans un test unitaire que deux tableaux sont égaux (c’est-à-dire qu’ils ont le même nombre d’éléments et que chaque élément est le même?).

En Java, j’utiliserais assertArrayEquals (foo, bar); , mais il semble n’y avoir aucun équivalent pour C #. J’ai essayé Assert.AreEqual(new ssortingng[]{"a", "b"}, MyFunc("ab")); , mais même si la fonction retourne un tableau avec “a”, “b” échoue toujours

Cela utilise Visual Studio 2008 Team Suite, avec la structure de test unitaire intégrée.

C’est CollectionAssert.AreEqual , voir aussi la documentation de CollectionAssert .

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"); } 

Test Success, a trouvé l’erreur:

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

Dans .NET 3.5, considérez peut-être Assert.IsTrue(foo.SequenceEqual(bar)); – il ne vous dira pas à quel indice il diffère, cependant.

Ok, voici une façon un peu plus longue de le faire …

 static void Main(ssortingng[] 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(); var enumerable2 = arr2.OfType(); 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; }