Trabajo con muchas aplicaciones web que funcionan con bases de datos de diversa complejidad en el back-end. Por lo general, hay una capa ORM separada de la lógica empresarial y de presentación. Esto hace que las pruebas unitarias de la lógica comercial sean bastante sencillas; las cosas se pueden implementar en módulos discretos y cualquier información necesaria para la prueba se puede falsificar mediante la burla de objetos.
Pero probar el ORM y la base de datos en sí siempre ha estado plagado de problemas y compromisos.
Con los años, he intentado algunas estrategias, ninguna de las cuales me satisfizo por completo.
Cargue una base de datos de prueba con datos conocidos. Ejecute pruebas contra el ORM y confirme que vuelven los datos correctos. La desventaja aquí es que su base de datos de prueba tiene que mantenerse al día con cualquier cambio de esquema en la base de datos de la aplicación, y podría no estar sincronizado. También se basa en datos artificiales, y no puede exponer errores que ocurren debido a la entrada estúpida del usuario. Finalmente, si la base de datos de prueba es pequeña, no revelará ineficiencias como un índice faltante. (Bien, ese último no es realmente para qué se deberían usar las pruebas unitarias, pero no duele).
Cargue una copia de la base de datos de producción y pruebe con eso. El problema aquí es que es posible que no tenga idea de lo que hay en la base de datos de producción en un momento dado; Es posible que sea necesario reescribir sus pruebas si los datos cambian con el tiempo.
Algunas personas han señalado que ambas estrategias se basan en datos específicos, y una prueba unitaria debería probar solo la funcionalidad. Con ese fin, he visto sugerido:
- Use un servidor de base de datos simulado y verifique solo que el ORM esté enviando las consultas correctas en respuesta a una llamada de método dada.
¿Qué estrategias ha utilizado para probar aplicaciones basadas en bases de datos, si las hay? ¿Qué ha funcionado mejor para ti?