unitarios test que pruebas metodologia ejemplos ejemplo driven development caracteristicas atdd tdd integration-testing database-testing

tdd - que - test driven development pdf



Pruebas de integración de base (6)

Cuando realiza pruebas de integración con solo su capa de acceso a datos o la mayoría de la pila de aplicaciones. ¿Cuál es la mejor manera de prevenir que las pruebas múltiples entren en conflicto si se ejecutan en la misma base de datos?


Actas.

Lo que hace el marco de prueba de la unidad ruby ​​on rails es este:

Load all fixture data. For each test: BEGIN TRANSACTION # Yield control to user code ROLLBACK TRANSACTION End for each

Esto significa que

  1. Cualquier cambio que haga su prueba en la base de datos no afectará a otros hilos mientras está en progreso
  2. Los datos de la próxima prueba no están contaminados por pruebas anteriores
  3. Esto es aproximadamente un billón de veces más rápido que la recarga manual de datos para cada prueba.

Por mi parte creo que esto es genial


Para aplicaciones simples de bases de datos, encuentro que usar SQLite es invaluable. Le permite tener una base de datos única e independiente para cada prueba.

Sin embargo, solo funciona si está usando una funcionalidad simple genérica de SQL o puede ocultar fácilmente las pequeñas diferencias entre SQLite y su sistema de base de datos de producción detrás de una clase, pero siempre he encontrado que es bastante fácil en las aplicaciones SQL que tengo desarrollado.


Quería aceptar las respuestas de Free Wildebeest y Orion Edwards, pero no me lo permitió. La razón por la que quería hacer esto es que había llegado a la conclusión de que estas eran las dos formas principales de hacerlo, pero que elegir debía depender del caso individual (principalmente el tamaño de la base de datos).


También ejecute las pruebas en diferentes momentos, para que no afecten el rendimiento o la validez de los demás.


Solo para agregar a la respuesta de Free Wildebeest también he usado HSQLDB para hacer una prueba de tipo similar donde cada prueba obtiene una instancia limpia de la base de datos.


Si bien no es tan inteligente como el marco de prueba de la unidad Rails en una de las otras respuestas aquí, la creación de datos distintos por prueba o grupo de pruebas es otra forma de hacerlo. El nivel de fastidio con esta solución depende de la cantidad de casos de prueba que tenga y cuán dependientes estén uno del otro. La tediosidad será cierta si tiene una base de datos por prueba o un grupo de pruebas dependientes.

Cuando se ejecuta el conjunto de pruebas, se cargan los datos al inicio, se ejecuta el conjunto de pruebas, se descargan / se comparan los resultados, asegurándose de que el resultado real cumpla con el resultado esperado. Si no, haz el ciclo nuevamente. Cargar, ejecutar suite, descargar / comparar.