Pruebas unitarias Assert.AreEqual para entidades DbContext

Deseo realizar una prueba unitaria de que mi lógica empresarial está cargando los datos correctos cargando una entidad a través de la lógica empresarial y comparándola con una entidad cargada directamente desde dbcontext.

Supongo que Assert.AreEqual falla porque las entidades se cargan como rastreadas.

Pensé que posiblemente podría usar AsNoTracking(), pero no funcionó.

¿Hay alguna forma de "desenvolver" la entidad del marco de la entidad a un POCO?

He leído acerca de deshabilitar la creación de proxy, pero ¿es esta la única opción?

Espero que haya algo similar (aunque me doy cuenta de un concepto completamente diferente), a ko.utils.unwrapObservable() en la biblioteca de javascript knockout.

preguntado el 22 de mayo de 12 a las 16:05

1 Respuestas

Es una prueba de integración extraña (no es una prueba unitaria en absoluto porque usa una base de datos): debería ser suficiente simplemente definir la expectativa estática en lugar de cargarla nuevamente desde la base de datos. Las pruebas dinámicas son más propensas a errores y pueden ocultar problemas.

Para que funcione, debe anular Equal para comparar datos no referencias. Deshabilitar la creación de proxy no funcionará porque aún tendrá una referencia diferente de su lógica comercial y una referencia diferente del contexto probado (a menos que comparta el contexto, pero en tal caso la prueba será aún más extraña).

contestado el 23 de mayo de 12 a las 09:05

Gracias @Ladisslav. Buen punto sobre: ​​"no es una prueba de unidad en absoluto porque usa una base de datos", la prueba de unidad no se siente del todo bien, estoy planeando mejorarla. ¿Quiere decir porque usa la base de datos para "esperar" o porque usa la base de datos en absoluto? - Alex KeySmith

Porque utiliza la base de datos en absoluto. La prueba unitaria debe probar una sola unidad independiente de los factores externos. - Ladislav Mrnka

Genial, gracias, el código me estaba dando escalofríos, espero refactorizarlo tan pronto como pueda. Gracias por la ayuda. - Alex KeySmith

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.