.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.