Pregunta

¿Cuál es la mejor práctica para probar una API que depende de los datos de la base de datos? ¿Cuáles son los problemas que debo tener en cuenta en una " Integración continua " ¿Entorno que ejecuta pruebas unitarias como parte del proceso de construcción? Quiero decir, ¿desplegaría su base de datos como parte de los scripts de compilación (puede que se ejecute su instalador) o debo buscar datos codificados [usar pruebas de unidades impulsadas por datos MSTest con XML]?

Entiendo que puedo simular la capa de datos para la capa de lógica de negocios, pero ¿qué sucede si tengo problemas en mis sentencias de SQL en DAL? Necesito ir a la base de datos, ¿verdad?

Bueno ... eso es un torrente de preguntas:) ... ¿Pensamientos?

No hay solución correcta

Otros consejos

En la medida de lo posible, debes simular un código para evitar golpear la base de datos por completo, pero me parece que tienes razón sobre la necesidad de probar tu SQL en algún lugar a lo largo de la línea. Si escribe pruebas que llegan a la base de datos, una sugerencia clave para evitar los dolores de cabeza es asegurarse de que su configuración obtenga los datos en un estado conocido, en lugar de confiar en que ya hay datos adecuados disponibles.

Y, por supuesto, ¡nunca pruebes contra tu base de datos en vivo! Pero no hace falta decirlo :)

Como se mencionó anteriormente, use el simulacro para simular llamadas de base de datos en pruebas unitarias a menos que quiera jugar con sus pruebas y datos sin fin. Probar sentencias SQL implica más de una prueba de integración . Ejecutar eso por separado de las pruebas unitarias, son 2 bestias diferentes.

Es una buena idea borrar automáticamente la base de datos de prueba y luego rellenarla con datos de arnés de prueba que se asumirá que estarán allí para todas las pruebas que necesitan conectarse a la base de datos. La base de datos debe restablecerse antes de cada prueba para un aislamiento adecuado: una prueba fallida que contenga datos incorrectos podría causar fallas falsas en las pruebas que siguen y se ensucia si tiene que ejecutar las pruebas en un cierto orden para obtener resultados consistentes.

Puede borrar y llenar la base de datos con herramientas ( DBUnit , DBUnit.NET , otros) o simplemente cree sus propias clases de utilidades para hacer lo mismo.

Como usted dijo, otras capas deberían estar suficientemente desconectadas de las clases que realmente llegan a la base de datos, por lo que la necesidad de cualquier tipo de base de datos involucrada en las pruebas se limita a las pruebas que ejecutan un pequeño subconjunto de su base de código. Los componentes de acceso a su base de datos se pueden burlar / aplastar para todo lo que depende de ellos.

Una cosa que hice fue crear métodos estáticos que devolvían datos de prueba de un estado conocido. Entonces usaría un " falso " DAL para devolver estos datos como si estuviera llamando a la base de datos. En cuanto a probar el procedimiento almacenado / sql, lo probé utilizando SQL Management Studio. YMMV!

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