2012-08-09 13 views
12

puedo usar primavera para crear e inicializar las bases de datos integrados mediante programación:¿Cómo uso los scripts de inicialización de base de datos incorporados de Spring durante la fase de prueba de integración?

@Before 
public void setUp() { 
    database = new EmbeddedDatabaseBuilder() 
      .setType(EmbeddedDatabaseType.H2) 
      .addScript("schema.sql") 
      .addScript("init.sql") 
      .build(); 
    .... 
} 

oa través de la configuración de primavera:

<jdbc:initialize-database data-source="dataSource"> 
    <jdbc:script location="classpath:schema.sql"/> 
    <jdbc:script location="classpath:init.sql"/> 
</jdbc:initialize-database> 

Aquí mis guiones schema.sql y init.sql se almacenan en el directorio src/test/resources. Así que si las pruebas utilizando el DATABSE incrustado se ejecutan con:

mvn test 

entonces los archivos, estando en src/test/resources están disponibles, y todo está bien.

Pero ahora supongamos que quiero usar en lugar de la base de datos integrada, junto con un servidor web incorporado (el embarcadero o incrustado Tomcat) en una prueba de integración, ejecute a través de

mvn integration-test 

Ahora, en esta fase tardía, me quiero hacer una prueba casi de punta a punta que al golpear ciertas URL para el servicio web devuelvan las respuestas HTTP esperadas, asumiendo ciertos datos en la base de datos incrustada. Pero en este punto, la guerra desplegados en el servidor web incorporado no tiene archivos de src/test/resources así que mis scripts de inicialización no están presentes, y me sale el error

Causado por: java.io.FileNotFoundException: clase de recurso camino [ schema.sql] no se puede abrir porque no existe

Ahora todo se trabajo si pongo los scripts en src/main/resources pero estos scripts son sólo para llenar una base de datos integrada para las pruebas y no lo hacen pertenecen en el archivo war en absoluto. ¿Alguien sabe cómo configurar una prueba de integración para que se pueda usar una base de datos electrónica, sin contaminar el archivo de guerra real que se implementará?

Tenía la esperanza de que la inicialización de base de datos incrustada de Spring podría usar algo que no sea un archivo. Pensé en JNDI, pero eso parece requerir la contaminación del archivo web.xml con una definición de recurso para los datos de prueba que aparecerían (nuevamente) en la guerra desplegable. O tal vez hay opciones de usar la carga? ¿Algunos trucos programáticos con Spring que no sé?

Respuesta

5

Usted debe ser capaz de hacer esto:

<jdbc:initialize-database data-source="dataSource"> 
    <jdbc:script location="file:///${project.basedir}/src/test/resources/schema.sql"/> 
    <jdbc:script location="file:///${project.basedir}/src/test/resources/init.sql"/> 
</jdbc:initialize-database> 
+1

$ {} project.basedir - Puede maven variables de contexto pueden utilizar dentro de la primavera? –

Cuestiones relacionadas