visual testmethod studio net gui .net nunit

.net - testmethod - Los Assert.Equals de NUnit lanzan la excepción "Assert.Equals no debe usarse para aserciones"



testmethod nunit (2)

tldr;

Assert.AreEqual(a, b); // <-- Compares a, b

no:

Assert.Equals(a, b); // <-- Irrelevant equality operator on Assert itself

Recientemente intenté usar el método Assert.Equals () al escribir una nueva prueba NUnit. Tras la ejecución, este método arroja una AssertionException que establece que Assert.Equals should not be used for Assertions. Esto es un poco desconcertante a primera vista. ¿Que está pasando aqui?


Assert es una clase estática que hereda de System.Object, ya que todas las clases lo hacen implícitamente en c #. System.Object implementa el siguiente método:

static bool Equals(object a, object b)

Los métodos en Assert que están destinados a la comparación de igualdad son los métodos Assert.AreEqual() . Por lo tanto, llamar al método Object.Equals() través de la clase Assert en una prueba unitaria es ciertamente un error. Para evitar este error y evitar confusiones, los desarrolladores de NUnit ocultaron intencionalmente Object.Equals en la clase Assert con una implementación que arroja una excepción. Aquí está la implementación:

/// <summary> /// The Equals method throws an AssertionException. This is done /// to make sure there is no mistake by calling this function. /// </summary> /// <param name="a"></param> /// <param name="b"></param> [EditorBrowsable(EditorBrowsableState.Never)] public static new bool Equals(object a, object b) { // TODO: This should probably be InvalidOperationException throw new AssertionException("Assert.Equals should not be used for Assertions"); }

Por supuesto, el mensaje de excepción en sí mismo es confuso, pero al menos le permite saber que ha hecho algo mal.