2009-01-28 8 views
14

Descripción para Assert.Equals() de la documentación de MSDN: No utilice este método.¿Por qué existe Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Equals()?

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 más sabiendo que no se supone que deba hacerlo. ;-)

¿Alguien sabe?

Respuesta

21

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

+0

Tenga en cuenta que '' CollectionAssert'' tiene el mismo inconveniente de exponer''Object.Equals''. A diferencia de '' Assert'', '' CollectionAssert'' no redefine el método por lo que no se obtiene una falla de prueba útil cuando se ejecuta la prueba que se obtiene al ejecutar una prueba que contiene '' Assert.Equals''. – vvnurmi

4

Todos los objetos en .NET derivan de Object.

El objeto tiene un método .Equals().

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

1

Se cambió en 2008 (Tal vez SP1) para que fallara una prueba cuando se llamaba, por lo que las personas que lo usaban por accidente dijeron que realmente no deberían usarlo.

1

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 métodos es útil para la detección e informe autónomo o errores en la prueba unitaria, ya que Object.Equals devuelve un valor booleano en lugar de arrojar si los valores no son iguales. Este es un problema si se utiliza como esto en una prueba de unidad:

Assert.Equals(42, ComputeMeaningOfLife()); 

Aparte del problema de esta unidad de prueba, posiblemente, correr demasiado tiempo :-), esta prueba podría tener éxito en silencio, incluso si el método Compute proporciona un resultado erróneo . 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, por lo que el código como en el ejemplo anterior no vuelve a Object.Equals y neutraliza 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.

Cuestiones relacionadas