2010-08-09 6 views
15

Mis pruebas de integración se ejecutarían mucho más rápido si utilizara la base de datos en memoria en lugar de PostgreSQL. Uso JPA (Hibernate) y necesito una base de datos en memoria que sea fácil de cambiar a usar JPA, fácil de configurar y confiable. Necesita soportar JPA e Hibernate (o viceversa si lo prefiere) bastante extensamente ya que no deseo adoptar mi código de acceso a datos para las pruebas.Base de datos simple y confiable en la memoria para pruebas rápidas de integración de Java con soporte para JPA

¿Qué base de datos es la mejor opción dados los requisitos anteriores?

Respuesta

19

Para pruebas de integración, ahora uso H2 (del autor original de HSQLDB) que yo prefiero más HSQLDB. Es faster (y quiero que mis pruebas sean lo más rápidas posible), tiene algunas características agradables como el modo compatibility, el equipo de desarrollo es muy receptivo (mientras que HSQLDB permaneció latente durante años hasta hace muy poco).

+0

Los puntos de referencia son para el almacén de datos persistente, los resultados en memoria pueden ser diferentes ya que la mayor parte de la sobrecarga se debe a políticas de disco/caché en las bases de datos. La diferencia entre H2 y HSQLDB es considerable pero no crítica. Todavía elegiría según la facilidad de uso, la configuración mínima y las funciones. Y la función del modo de compatibilidad parece muy atractiva. ¡Gracias! – topchef

+0

@grigory: Sí, tienes razón. Pero incluso cuando se utiliza un modo persistente, H2 y HSQLDB realmente se ejecutan en la memoria de forma predeterminada y difieren la escritura en el disco (al precio de Durabilidad). Entonces los datos siguen siendo interesantes. –

4

He estado usando HSQLDBin-memory para realizar pruebas de integración de la persistencia de JPA/Hibernate en Java. Comienza bastante rápido, no requiere ninguna configuración especial.

El único problema que he visto hasta ahora con el uso de HSQLDB con Hibernate tenía que ver con el tamaño de lote que se debe establecer en 0, pero que podría haberse relacionado con una versión anterior. Haré una excavación y veré si puedo encontrar detalles de ese problema.

Derby supports an in-memory mode En estos días, ya no está marcada experimental.

+0

dado el mismo soporte para la base de datos en memoria Me gustaría tener la solución más simple y menos invasiva (con suerte, cero personalización (excepto para persistence.xml)). ¡Gracias! – topchef

+0

Otro voto para HSQLDB, especialmente desde el lanzamiento de V2, v1.x no admitiría algunas de las construcciones actuales que son compatibles con JDBC, como devolver valores clave autogenerados, pero v2 sí lo hace. – mezmo

2

Uso Derby. Por un lado, se trata de 3 líneas menos de código por prueba de unidad, ya que no hay necesidad de un apagado después de la prueba. Sin embargo, debe utilizar una implementación de JPA que pueda eliminar y crear tablas como EclipseLink.

Derby también puede inicializar una nueva base de datos en memoria desde un archivo para que pueda tener una base de datos de referencia y volver a ella en cualquier momento.

Para probar la unidad, prefiero crear mis objetos en la prueba @Antes de la lógica de la unidad, me resulta más fácil especialmente con JPA, ya que me permite la flexibilidad de hacer refactorizaciones y no tener que preocuparme por la estructura de la base de datos subyacente. herramientas como DBunit se basan prácticamente en una estructura estática y la refactorización implica el cambio manual de los DBunit en lugar de confiar en las capacidades de refactorización de Eclipse.

Cuestiones relacionadas