Pregunta

Uso un generador de código (CodeSmith con plantilla .NetTiers) para generar todo el código DAL. Escribo pruebas unitarias para mi código (capa empresarial), y estas pruebas se están ejecutando bastante lentamente. El problema es que para cada prueba, reinicio la base de datos para tener un estado limpio. Además, como hago muchas pruebas, parece que la latencia de las operaciones de la base de datos suma un poco de retraso.

Todas las operaciones de DB se realizan a través de una clase DataRepository que es generada por .NetTiers. ¿Sabe si hay una manera de generar (o codificar yo mismo) un repositorio de datos simulado que usaría el almacenamiento en memoria en lugar de usar la base de datos?

De esta manera, podría usar este repositorio simulado en mis pruebas de unidad, acelerándolos mucho, ¡sin cambiar realmente nada a mi código actual!

¿Fue útil?

Solución

Eche un vistazo a los contenedores de inyección de dependencia (DI) y de Inversión de control (COI). Esencialmente, creará una interfaz que un nuevo objeto de base de datos de simulacro puede implementar, y luego el marco DI inyectará su base de datos simulada al ejecutar pruebas, y la base de datos real al ejecutar su aplicación.

Hay numerosas bibliotecas gratuitas y de código abierto que podrías usar para ayudarte. Ya que está en C #, una de las nuevas y nuevas bibliotecas de DI es Ninject . Hay muchos otros también. Consulte este artículo de Wikipedia para otros y una descripción de alto nivel.

Otros consejos

A partir de la descripción del problema, creo que está realizando la prueba de Integración porque su prueba está haciendo uso de la base de datos de Negocios y DAL y en vivo.

Para las pruebas unitarias, se trata de una capa de código con todas las demás dependencias, ya sea simulada o aplastada. Con este enfoque, las pruebas unitarias serán muy rápidas de ejecutar en cada cambio de código incremental.

Hay varios marcos simulacros que puedes usar como Rhino Mock, Moq, typemock para nombrar algunos. (En mi proyecto, utilizo Rhino para simular la capa DAL y la prueba de unidad Business Layer en aislamiento)

Harsha

Algunas de nuestras pruebas unitarias utilizan datos obtenidos de XML que se generaron a partir de una base de datos para simular el acceso a la base de datos. Las clases de DAL se reemplazan por las simuladas porque todas están almacenadas en un contenedor DI.

La generación de los xml es un código personalizado, si encuentras una solución de código abierto para esto, me alegra oírlo.

Edite después de la respuesta de Stefan: recuerdo que otro equipo utilizó SQL CE para su base de datos de prueba

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top