2011-08-16 11 views
5

tengo el siguiente código:Problema Unidad de Pruebas en VB.NET

<TestMethod()> _ 
Public Sub GetDirectoryEntryTest() 
    Dim path As String = runner.getLDAPPath() 
    Dim expected As DirectoryEntry = runner.GetDirectoryEntry() 
    Dim actual As DirectoryEntry 
    actual = LDAPBase.GetDirectoryEntry(path) 
    Assert.AreEqual(expected, actual) 
End Sub 

Esta prueba de la unidad falla. Los objetos DirectoryEntry son exactamente lo mismo, pero diferentes referencias a diferentes objetos. Vengo de un fondo Java donde siempre tienes el .equals().

¿Qué puedo hacer para que esto se evalúe correctamente y devuelva verdadero, ya que, para todos los efectos, los objetos son iguales. ¿Hay algo que pueda hacer como lo haría en Java y anular los iguales()?

+5

¿todos los propósitos intensivos? Te refieres a ** intents and ** purposes :) – mellamokb

+0

La prueba parece estar funcionando bien para mí. Los dos objetos que estás comparando no son iguales. –

+0

@mellamokb Bueno, me siento un poco tonto después de eso, jaja – user489041

Respuesta

5

intente comparar las trayectorias de los objetos con algo como esto:

Assert.AreEqual(expected.Path, actual.Path) 

que comparará los caminos subyacentes (tipo cadena) en lugar de las referencias a objetos. Si las rutas son las mismas es suficiente, no debería tener que anular nada.

EDIT:

DirectoryEntry es un tipo de referencia que se hereda es igual del objeto y así:

De Object.Equals Method:

La implementación predeterminada de Iguales apoya la igualdad de referencia para tipos de referencia , y la igualdad bit a bit para los tipos de valores. La referencia igualdad significa que las referencias de objeto que se comparan se refieren al mismo objeto . La igualdad de bits significa que los objetos que se comparan tienen la misma representación binaria.

+0

Así que supongo que eso es parte de mi pregunta. ¿Cuál es mi afirmación en realidad comparando? ¿Está comparando las referencias, o está llamando a algún tipo de método igual en el DirectoryObject? – user489041

+0

Si se llama a un método igual, no significa que obtenga una comparación de valores. Todavía puede llamar a iguales y comparar las referencias y eso es probablemente lo que está sucediendo en su caso. (Ver mi edición) –

2

¿En qué sentido son las dos entradas iguales? ¿Son sus ToString() iguales? En caso de que sea suficiente para considerarlos iguales en la prueba, entonces compare los dos valores de ToString() entre sí.

Si necesita comparar las dos entradas de directorio, implemente un IEqualityComparer personalizado y utilícelo para comparar la igualdad en la prueba.

Cuestiones relacionadas