Entonces, estoy desarrollando algunos servicios web RESTful Java basados en bases de datos, usando Hibernate y MySQL. Para fines de prueba, estoy usando la base de datos H2 en memoria. H2 es agradable y rápido, por lo que esto ha funcionado muy bien. El único problema es que llenar las tablas de DB antes de mis pruebas es algo tedioso. Básicamente creo y persisto un montón de objetos a mano. Me pregunto si tal vez voy por el camino equivocado.
Por favor, dime, ¿cuáles son las mejores prácticas para hacer lo que intento hacer? ¿Alguna herramienta que pueda ayudarme? ¿Alguna estrategia general o consejos?
¿Quizás se beneficiaría al utilizar un marco burlón en sus pruebas unitarias automatizadas?
Hay varios diferentes para elegir:
Mockito
JMock
EasyMock
PowerMock
fuente
Todo lo que realmente puede hacer es conservar los objetos a mano o tener una base de datos preconstruida que cargue. También debe asegurarse de que la base de datos se restablezca después de cada prueba.
En un proyecto en el que estoy trabajando, soy nuevo en Hibernate, así que tengo un montón de pruebas para relaciones básicas y operaciones en cascada. Usando TestNG tengo una
GenericHbTest
clase desde la cual se extienden todas las pruebas de Hibernate. Tiene un@BeforeMethod
método que reexporta el esquema db y algunos métodos de utilidad para generar varios objetos DAO. Esto me permite adaptar un entorno para cada prueba.La única desventaja de volver a exportar el esquema en cada prueba es que lleva mucho tiempo terminar de ejecutar las pruebas. Pero solo necesito asegurarme de que todo esté separado y limpio. Si tienes más experiencia con Hibernate y tienes un esquema más estable, entonces reexportar antes de cada prueba probablemente sea innecesario. Al menos, despeje todas las tablas de antemano
fuente
¿Has considerado la serialización de objetos? Este es el método más rápido y fácil que utilicé.
Consiste en crear el estado que desea, serializarlo en el disco. Utiliza esos archivos para llenar la base de datos en memoria que usa para sus pruebas.
Una de las ventajas es que puede editar los archivos manualmente más tarde.
Como alternativa, si está bien organizado en sus pruebas unitarias, podría crear generadores de objetos. Cuando comienzan las pruebas, se crea una instancia de la base de datos y se exporta el esquema (usando nHibernate). Los objetos se generan y se completan en la base de datos.
Este método tiene una ventaja sobre el primero: sus generadores de objetos evolucionan con su código, por lo que no necesita preocuparse por sus archivos como en la sugerencia anterior.
fuente