79 votos

Afirmar que las matrices son iguales en Visual Studio 2008 en el marco de prueba

Hay una manera fácil de comprobar en una unidad de prueba que dos matrices son iguales (es decir, tienen el mismo número de elementos, y cada elemento es el mismo?).

En Java, yo usaría assertArrayEquals (foo, bar);, pero parece ser que no existe equivalente para C#. He intentado Assert.AreEqual(new string[]{"a", "b"}, MyFunc("ab"));, pero a pesar de que la función devuelve un array con "a", "b" el cheque aún no

Este es el uso de Visual Studio 2008 Team Suite, con la incorporada en el marco de pruebas unitarias.

141voto

Anteru Puntos 8581

Es CollectionAssert.AreEqual, véase también la documentación para CollectionAssert.

21voto

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

El Éxito en los exámenes,que se encuentra el error:


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

3voto

Marc Gravell Puntos 482669

En .NET 3.5, tal vez considerar Assert.IsTrue(foo.SequenceEqual(bar)); - no le dirá en qué índice se diferencia, sin embargo.

1voto

Sandeep Datta Puntos 7344

Ok aquí es un poco más largo de la manera de hacerlo...

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X