Estoy configurando algunos andamios de prueba alrededor de un proyecto existente. Esto incluye algunas pruebas de integración, utilizando JUnit y DbUnit. También configuré una instalación de Jenkins para una integración continua.JUnit + DbUnit: cambiar la conexión de la base de datos entre entornos de desarrollo y prueba
Mi problema consiste en cambiar las conexiones de base de datos entre los entornos de desarrollo y prueba. Tengo mi propia pila de productos instalada localmente para realizar pruebas e investigaciones rápidas y ad-hoc. A medida que desarrollo, realizo pruebas en mi base de datos privada, ya que es más rápido y no arruinaré el día de nadie con el código de trabajo en progreso.
Una vez que el código esté registrado, Jenkins ejecutará mis pruebas. En este momento todavía está apuntando a mi db local. Prefiero que Jenkins ejecute pruebas en una base de datos diferente, una que se encuentre en el entorno de prueba.
¿Existe una mejor práctica/estrategia/tecnología/etc. para cambiar las conexiones de la base de datos para pruebas sin tener que cambiar el código? Puntos de bonificación si la solución permite a Jenkins realizar las mismas pruebas contra múltiples DB (debería ser posible ya que DbUnit es independiente).
Edits para más información:
El producto es una grande, con de diferentes componentes que interactúan docenas (generalmente en VMS/procesos separados). En un sistema en vivo, los diferentes procesos típicamente comunican a través de la base de datos. IE, el proceso de IU escribe cambios en una tabla y el proceso de fondo sondea esa tabla para ver los cambios. Sí, es horrible. Para las pruebas de integración, configuro un sistema usando la UI y capturo ese estado con DbUnit. Entonces puedo ejecutar pruebas contra esa "entrada".
Mi componente y todos los componentes nuevos están gestionados por maven. Las conexiones DB actualmente están codificadas de forma rígida en la configuración de prueba. El sistema DbUnit funciona; Me gustaría poder cambiar la base de datos a la que hacen referencia mis pruebas dependiendo de si están siendo ejecutadas por mí en mi entorno de desarrollo o ejecutadas por Jenkins en el entorno de prueba.
Soy vergonzosamente noblemente cuando se trata de Spring, pero lo poco que sé me lleva a pensar que puede ser una solución útil. Tengo la impresión de que configuró orígenes de datos en xml y anota sus clases para la inyección de dependencias en tiempo de ejecución. ¿Spring podría cambiar qué DB se inyecta en función del entorno (desarrollo vs. prueba)? –
Tiene razón acerca de la configuración de la conexión de la base de datos en XML. Pero para lo que está tratando de lograr, creo que realmente debería centrarse en lo que Maven va a hacer por usted y en cómo las propiedades y perfiles de Maven para su compilación se pueden utilizar para personalizar su compilación y ejecutar sus pruebas. Maven puede ejecutar las pruebas de su unidad y tiene recursos que se usan solo en la fase de prueba, luego puede usar otro conjunto de recursos para su compilación principal, yendo a cualquier entorno. Jenkins ejecuta maven builds, para que puedas simular en tu máquina exactamente las mismas cosas que Jenkins va a hacer. – BenSchro10