79 votes

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

Existe-t-il un moyen simple 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 identique) ?

En Java, j'utiliserais assertArrayEquals (foo, bar); mais il ne semble pas y avoir d'équivalent pour le C#. J'ai essayé Assert.AreEqual(new string[]{"a", "b"}, MyFunc("ab")); mais même si la fonction renvoie un tableau avec "a", "b", la vérification échoue toujours.

Nous utilisons Visual Studio 2008 Team Suite, avec le cadre de test unitaire intégré.

140voto

Anteru Points 8581

C'est CollectionAssert.AreEqual voir également le Documentation pour CollectionAssert .

21voto

Erix Xu Points 109

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 réussi, j'ai trouvé l'erreur :

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

3voto

Marc Gravell Points 482669

Dans .NET 3.5, on peut envisager Assert.IsTrue(foo.SequenceEqual(bar)); - il ne vous dira pas à quel indice il diffère, cependant.

1voto

Sandeep Datta Points 7344

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X