Visual Studio Unit Testing Assert.AreEqual falla con valores reales esperados e idénticos

Soy un novato en lo que respecta a las Pruebas Unitarias, así que perdóneme si esto es ignorancia total. Pero no puedo conseguir que este método pase una prueba de unidad incluso si proporciono los mismos valores para lo esperado y lo real. Cuando establezco puntos de interrupción y paso a paso, confirmé que tanto las variables esperadas como las reales son una matriz de cadenas que contiene dos elementos, bla y bla. Pero la prueba sigue fallando cada vez que indica que “Assert.AreEqual falló. Se esperaba: System.String [] Real: System.String []”

namespace TestProject1 { public class Testing { public string[] PMDate(string lastPm) { if (string.IsNullOrEmpty(lastPm)) return new []{"blah", "blah"}; string[] results = lastPm.Split(new[] {" "}, StringSplitOptions.None); if (results.Length < 2) return new[] {"blah", "blah"}; return results; } } [TestClass()] public class UnitTest1 { [TestMethod()] public void PmDateTest() { Testing test = new Testing(); string[] expected = test.PMDate("01/01/1900"); string[] actual = test.PMDate("01/01/1900"); Assert.AreEqual(expected, actual); } } 

}

Su prueba utilizará object.Equals , que no se reemplaza para los arreglos. En otras palabras, esto imprimirá falso:

 var x = new[] { 0 }; var y = new[] { 0 }; Console.WriteLine(x.Equals(y)); 

Deberías usar CollectionAssert para colecciones:

 CollectionAssert.AreEqual(expected, actual); 

Esto está fallando porque las matrices de cadenas son dos objetos diferentes, incluso si contienen los mismos valores, son objetos diferentes. Simplemente puede verificar esto verificando lo esperado. GetHashcode () y actual.GetHashCode () en el tiempo de ejecución y verá que los códigos hash son diferentes