Pregunta

He oído que cuando el desarrollo de aplicaciones que utiliza una base de datos que debe hacer las pruebas unitarias de base de datos. ¿Cuáles son las mejores prácticas en las pruebas unitarias de base de datos? ¿Cuáles son las principales preocupaciones cuando se realizan pruebas con la unidad de frenado y la forma de hacerlo "derecho"?

¿Fue útil?

Solución

¿Cuáles son las mejores prácticas en las pruebas unitarias de base de datos?

El DbUnit marco (un marco de pruebas que permite poner una base de datos en un estado de conocimientos y para llevar a cabo la afirmación contra su contenido) tiene una página de listado de base de datos de prueba mejores prácticas que, a mi experiencia, son verdaderas.

¿Cuáles son las principales preocupaciones al hacer las pruebas unitarias db

  • Creación de un esquema hasta la fecha, la gestión de cambios de esquema
  • Configuración de datos (datos de referencia, datos de prueba) y mantenimiento datos de prueba
  • Keeping pruebas independientes
  • Permitir a los desarrolladores trabajar simultáneamente
  • Velocidad (ensayos realizados con la base de datos son típicamente más lento y hará que toda su construcción toma más tiempo)

y cómo hacerlo "derecho"?

Como se dio a entender, seguir las buenas prácticas conocidas y el uso de herramientas / marcos específicos:

  • Prefiero la base de datos de memoria si es posible (para velocidad)
  • Usar un esquema por desarrollador es una necesidad (para permitir el trabajo simultáneo)
  • Utilice una herramienta de "base de datos de la migración" (a la RoR) para gestionar los cambios de esquema y actualizar un esquema a la versión final
  • Construir o utilizar un instrumento de prueba que permite poner la base de datos en un estado conocido antes de cada prueba y para realizar afirma frente a los datos después de la ejecución (o para ejecutar las pruebas dentro de una transacción que deshacer al final de la prueba).

Otros consejos

Una lista de elementos que deben ser revisados ??y considerados cuando mira fijamente con las pruebas unitarias de base de datos

  • Cada probador necesita una base de datos independiente, con el fin de evitar la interferencia con las actividades de otros probador / desarrollador
  • Para tener una manera fácil de crear una base de datos a ser probado (esto está relacionado con que tiene una base de datos SQL Server bajo control de versiones). Esto es especialmente útil cuando se trata de encontrar lo que salió mal si fallan algunas pruebas
  • Focus en áreas específicas y las pruebas de la creación de un único módulo en lugar de cubrir todos a la vez. Adición de pruebas de forma granular es una manera buena para ser eficiente
  • Asegúrese de proporcionar tantos detalles como sea posible cuando falla una prueba, para permitir una depuración más fácil
  • Use uno y los mismos datos de prueba para todas las pruebas

Si la prueba se implementan utilizando tSQLt marco, el proceso de prueba de la unidad podría ser complicado cuando se trata de una gran cantidad de bases de datos desde múltiples instancias de SQL Server. Con el fin de mantener, ejecutar y gestionar las pruebas unitarias directamente desde SQL Server Management Studio, ApexSQL Test Unit lata ser utilizado como una solución

Tome un vistazo a este enlace . No hace más de algunos de los conceptos básicos para la creación de pruebas unitarias procedimientos almacenados en SQL Server, así como los diferentes tipos de pruebas unitarias y cuándo debe usarlos. No estoy seguro de qué DBMS que está utilizando pero es evidente que este artículo está dirigido a SQL Server.

robados del artículo:

Las pruebas Función:

La primera y probablemente más frecuente clase de prueba de la unidad de base de datos es una Comprobación de las funciones. En mi mente, función Comprobación de las funciones-o núcleo APIs, si se quiere, de su base de datos de la base de datos de la perspectiva del consumidor. Prueba de capacidad de programación de una base de datos objetos es el escenario de la línea principal aquí. Por lo tanto, las pruebas de todos los procedimientos almacenados, funciones y disparadores dentro de su base de datos constituyen pruebas de función en mi mente. Para probar un procedimiento almacenado, tienes que ejecutar el procedimiento almacenado y verificar que sea la esperada Los resultados fueron devueltos o la se produjo un comportamiento adecuado. Sin embargo, puede probar algo más que este tipo de objetos. Usted puede Imagine que quiere asegurarse de que un punto de vista, por ejemplo, devuelva el apropiado cálculo a partir de una columna calculada. Como se puede ver, las posibilidades en este reino son grandes.

Pruebas de esquema

Uno de los aspectos más críticos de una base de datos es su esquema, y ??pruebas para garantizar es que se comporta como se esperaba Otra clase importante de la base de datos pruebas de unidad. Aquí, a menudo deseará para asegurar que una vista devuelve la esperado conjunto de columnas de la tipo de datos apropiado en el orden apropiado. Tu podrías querer asegúrese de que su base de datos hace, en De hecho, contiene las tablas que 1.000 esperas.

Seguridad Pruebas de

En el día de hoy y la edad, la seguridad de los datos que se almacenan dentro de la base de datos es crítico. Por lo tanto, otro importante clase de pruebas unitarias de base de datos son los que prueba la base de datos seguridad. En este caso, tendrá que exigir que existan usuarios particulares en las su base de datos y que son asignado los permisos apropiados. A menudo se desee crear negativo pruebas que intentan recuperar datos a partir de tablas o vistas restringidas y asegúrese de que el acceso es apropiadamente negado.

Pruebas de-datos

Muchas bases de datos contienen los datos de saldos, o datos de semillas. Estos datos cambian con poca frecuencia y se utiliza a menudo como las operaciones de búsqueda de datos para aplicaciones o final usuarios. ZIP códigos y sus asociados ciudades y estados son grandes ejemplos de este tipo de datos. Por tanto, es útil para crear ensayos para asegurar que sus datos de hace, de hecho, existen en su base de datos.

I bueno que lo preguntas de las pruebas unitarias, y no las pruebas en general.

Las bases de datos tienen muchas características que necesitan ser probados. Algunos ejemplos:

  • Tipos de datos / Tamaño juegos de caracteres / (tratan de insertar un nombre sueco, o direcciones URL largas o números desde el mundo real, y ver si sus definiciones de columna están bien)
  • Triggers
  • Contraints (claves externas, la singularidad ...)
  • Vistas (comprobar que los datos se incluyeron correctamente / excluidos / transformado)
  • Procedimientos almacenados
  • UDF
  • Permisos
  • ...

Esto es útil no sólo cuando se cambia algo en su base de datos, sino también al actualizar su DBMS, o cambiar algo en su configuración.

En general, pruebas de integración se lleva a cabo. Esto significa que se crea un conjunto de pruebas en un lenguaje de programación como PHP o Java, y las pruebas de emitir algunas consultas. Pero si algo falla, o si hay algunas excepciones, es más difícil de entender el problema, por 2 razones:

  • El problema podría estar en su código PHP, o en la configuración de PHP, o en la red, o ...
  • Las sentencias SQL son más difíciles de leer y modificar, si se incorporan en otro lenguaje de programación.

Por lo tanto, en mi opinión, para bases de datos complejas es necesario utilizar un marco de pruebas unitarias que está escrito en SQL (usando procedimientos almacenados y tablas). Usted tiene que elegir con cuidado, porque ese tipo de herramientas no se utiliza ampliamente (y por lo tanto no probado ampliamente). Por ejemplo, si utiliza MySQL Sé que estas herramientas:

Yo uso las pruebas unitarias / nunit / etc y el código de la base de datos de hasta junit con Java o C #. Estos pueden ejecutarse en un servidor de integración tal vez usando un esquema separado de la base de datos de prueba.

La última Oracle SQL Developer viene con construido en un marco de pruebas de unidad. Tenía una mirada a esta pero me no utilizarla. Se utiliza una interfaz gráfica de usuario para crear y ejecutar pruebas y tiendas de todas las pruebas en la base de datos por lo que no es tan fácil de poner casos de prueba bajo control de versiones. Probablemente hay otras infraestructuras de prueba por ahí me imagino que podrían ser específicos de su base de datos.

Las buenas prácticas son similares a las pruebas regulares de la unidad:

  • poner las pruebas bajo control de origen
  • pruebas de maquillaje que se ejecutan rápido - no lo hacen prueba demasiado a la vez
  • hacer sus pruebas reproducible

Tome una mirada en el marco DBTestDriven. Funciona muy bien para nosotros. Puedes descargarlo desde GitHub o su página web.

En cuanto al desarrollo de JVM, las pruebas unitarias se pueden beneficiar de la abstracción JDBC:. Tan pronto como usted sabe qué datos JDBC son planteadas por el acceso DB, estos datos pueden ser JDBC 'repite'

Así caso el acceso DB puede ser 'reproducido' para las pruebas, sin el DB de destino:. Ninguna prueba / datos de aislamiento complejidad, facilidad de integración continua

Mi Acólito marco es un marco útil de esta manera (incluyendo herramienta GUI estudio para 'registro' resultado DB): https://github.com/cchantep/acolyte

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