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.
Respuestas
¿Demasiados anuncios?Es CollectionAssert.AreEqual
, véase también la documentación para CollectionAssert.
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.)
Marc Gravell
Puntos
482669
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;
}