java - software - junit tutorial
JUnit para el código de la base de datos (5)
DbUnit satisfará tus necesidades. Una cosa a tener en cuenta es que han cambiado a usar SLF4J como fachada de registro en lugar de JCL. Puedes configurar SLF4J para que reenvíe el registro a JCL pero ten en cuenta que si estás usando Maven DbUnit apesta en su proveedor de registro Nop de manera predeterminada, así que tendrás que usar una exclusión, recientemente publiqué sobre este conflicto.
He intentado implementar pruebas unitarias y actualmente tengo un código que hace lo siguiente:
- consultar la base de datos externa, cargar en una tabla de fuentes
- consultar una vista, que es un delta de mis tablas de datos y de fuentes, actualizar la tabla de datos para que coincida con la tabla de fuentes
mi estrategia de prueba de unidad es esta:
Tengo una base de datos de prueba que soy libre de manipular.
- en setUP (), cargue algunos datos en mi prueba db
- ejecutar mi código, utilizando mi db de prueba como fuente
- inspeccionar la tabla de datos, verificar los recuentos y la existencia / no existencia de ciertos registros
- pruebas claras db, cargando en un conjunto diferente de datos
- ejecutar código nuevamente
- inspeccionar la tabla de datos de nuevo
Obviamente tengo los conjuntos de datos que cargué en la configuración de base de datos de origen, de modo que sé que ciertos registros deben agregarse, eliminarse, actualizarse, etc.
Parece que esto es un poco engorroso y debería haber una manera más fácil? ¿alguna sugerencia?
¿Es su intención probar la vista que genera los deltas, o probar que su código agrega, elimina y actualiza correctamente en respuesta a la vista?
Si desea probar la vista, puede usar una herramienta como DBUnit para completar su feed y tablas de datos con varios datos cuyo delta ha calculado manualmente. Luego, para cada prueba, verificaría que la vista arroje un conjunto coincidente.
Si desea probar cómo responde su código a las diferencias detectadas por la vista, trataría de abstraer el acceso a la base de datos. Imagino un método java al que puede pasar un conjunto de resultados (o una lista de POJO / DTO) y devuelve una lista de arreglos de objetos de parámetros (nuevamente, o POJO) para ser agregados. Otros métodos analizarían la lista de diferencias para los elementos que se eliminarán y actualizarán. Luego puede crear un conjunto de resultados falso o pojo, pasarlos a su código y verificar que se devuelvan los parámetros correctos. Todo sin tocar una base de datos.
Creo que la clave es dividir el proceso en partes y probar cada una de ellas de la forma más independiente posible.
Yo uso DbUnit, pero también trabajo mucho para no tener que probar contra el DB. Las pruebas que van en contra de la base de datos solo deberían existir con el propósito de probar la interfaz de la base de datos. Así que tengo Mock Db Connections que puedo establecer los datos para usarlos en todas las demás pruebas.
Además del DBUnit ya sugerido, es posible que desee examinar Unitils . Utiliza DBUnit, pero proporciona más que eso (cotizando desde el sitio):
- Mantenimiento automático de bases de datos, con soporte para scripts incrementales, repetibles y posteriores al procesamiento
- Deshabilitar automáticamente las restricciones y establecer secuencias a un valor mínimo
- Soporte para Oracle, Hsqldb, MySql, DB2, Postgresql, MsSql y Derby
- Simplifique la configuración de conexión de la base de datos de prueba
- Inserción simple de datos de prueba con DBUnit * Ejecutar pruebas en una transacción
- Creación e inyección del administrador de entidades JPA para hibernación, enlace superior y * Creación e sesión de Hibernate SessionFactory
- Probar automáticamente el mapeo de entidades JPA / hibernar objetos mapeados con la base de datos
Si está utilizando Maven, una opción es usar el plugin sql-maven . Le permite ejecutar scripts de inicialización / población de la base de datos durante el ciclo de creación de maven.