c# - areequal - Assert.ReferenceEquals() Pasa donde Object.ReferenceEquals() devuelve ''falso'' en Visual Studio Test
assert c# (1)
Al intentar crear una prueba de unidad inicial y fallida en las capacidades de prueba de Visual Studio Professonal 2008, parece que no puedo hacer que Assert.ReferenceEquals()
falle correctamente cuando una instancia de objeto no es igual a una referencia nula. Tenga en cuenta que object.ReferenceEquals()
está devolviendo correctamente false
para esta misma comparación.
Aquí está mi código de clase:
public static class Project
{
public static object TheObject { get; set; }
public static void Startup(object theObject)
{
// ToDo: Project.Startup(): Test.
// ToDo: Project.Startup(): Implement.
}
}
Y luego, aquí están los aspectos clave de mi clase de prueba:
[TestClass()]
public class ProjectTest
{
[TestMethod()]
public void StartupTest()
{
object obj = "hello";
Project.Startup(obj);
Assert.ReferenceEquals(obj, Project.TheObject); // Test Passes!?!
}
}
Tenga en cuenta que el método de static void Startup(object)
vacío static object TheObject
está vacío, por lo que la propiedad static object TheObject
nunca se establece y permanece null
. Entonces, claramente, Assert.ReferenceEquals(obj, Project.TheObject)
debería fallar, pero de alguna manera esta prueba pasa.
Tenga en cuenta que el cambio
Assert.ReferenceEquals(obj, Project.TheObject)
a
Assert.IsTrue(object.ReferenceEquals(obj, Project.TheObject))
hace que esta prueba falle correctamente .
Esto parece demasiado simple, y sin embargo no puedo ver qué está mal aquí. Si alguien puede señalar el error a mi manera, estaría muy agradecido.
Gracias por adelantado,
Micro
Actualización respondida por James Avery:
Ah, qué tonto me siento ahora. Sabía que tenía que ser algo como esto. Guau.
Efectivamente, ''GoToDefinition'' me lleva a ''Object.ReferenceEquals ()''. Así que escribir "Assert.ReferenceEquals ()" es realmente System.Object.ReferenceEquals (), que en mi caso estaba devolviendo silenciosamente ''falso''. Esto, por supuesto, no tiene nada que ver con fallar una afirmación, por lo que la prueba pasa . Increíble.
Gracias james
El método ReferenceEquals al que llama es el método estático disponible en todos los objetos de referencia, no forma parte del marco de prueba. Si observa, está devolviendo un valor booleano mientras que una aserción normal sería nula. Esto es definitivamente confuso, .AreSame () es la afirmación que está buscando.