visualstudio visual unittesting unitarias unit testtools test studio pruebas microsoft ejemplos ejemplo areequal unit-testing mstest

unit testing - unitarias - ¿Por qué existe Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Equals()?



unit test c# ejemplo (4)

Descripción para Assert.Equals () de la documentación de MSDN: No use este método.

Eso es todo, la explicación completa. Uh ... bien, pero entonces ... ¿por qué está allí? ¿Es un método obsoleto de una versión anterior del marco? ¿Algo que se supone debe ser utilizado solo por otras Asambleas de Microsoft?

Simplemente me da ganas de usarlo aún más sabiendo que no debo hacerlo. ;-)

¿Alguien sabe?


.Equals se hereda del objeto. Se muestra como "No usar este método" para que los usuarios no lo confundan con el método AreEqual.


Todos los objetos en .NET derivan de Object .

Object tiene un método .Equals ().

Aparentemente, el método .Equals () para este objeto en particular no hace nada útil, por lo que los documentos te advierten que no hace nada útil.


Se modificó en 2008 (Tal vez SP1) para suspender una prueba cuando se le llamó, por lo que a las personas que la usaban por accidente se les dijo que realmente no deberían usarla.


Assert.Equals , al igual que su método de clase basado en Object.Equals , es perfectamente útil para comparar objetos. Sin embargo, ninguno de los dos métodos es útil para la detección e informe independientes o errores en las pruebas unitarias, ya que Object.Equals devuelve un valor booleano en lugar de Object.Equals si los valores no son iguales. Este es un problema si se usa así en una prueba unitaria:

Assert.Equals(42, ComputeMeaningOfLife());

Aparte del problema de que esta prueba de unidad posiblemente se ejecute demasiado tiempo :-), esta prueba tendría éxito silenciosamente incluso si el método Compute proporciona el resultado incorrecto. El método correcto para usar es Assert.AreEqual , que no devuelve nada, pero arroja una excepción si los parámetros no son iguales.

Se agregó Assert.Equals para que el código como en el ejemplo anterior no vuelva a Object.Equals y neutralice silenciosamente la prueba unitaria. En cambio, cuando se llama desde una prueba unitaria, Assert.Equals siempre arroja una excepción que le recuerda que no debe usarla.