У меня есть проект сохранения с Spring и Hibernate, созданный с помощью maven, я запускаю тестирование с использованием Junit и тестовой базы данных HSQLDB, когда я выполняю тест, сначала инициализирую базу данных HSQLDB. strong> в режиме сервера есть ли способ заставить hudson инициализировать базу данных или с помощью maven?
hudson создает проект, используя junit maven и HSQLDB в режиме сервера
Ответы (3)
Я бы использовал DbUnit и Плагин DbUnit Maven для этого. Вы можете использовать его для очистить базу данных и вставить набор данных перед этапом тестирования. и/или настроить данные для каждого теста (см. Начало работы для JUnit 3, см., например, эту запись в блоге для JUnit 4).
Другой вариант — использовать подключаемый модуль SQL Maven. В разделе примеры есть конфигурация, показывающая, как удалить/ создать базу данных и схему, затем заполнить ее перед этапом тестирования и удалить базу данных после этапа тестирования).
Более поздний подход дает вам меньше контроля над настройкой данных между тестами, поэтому я предпочитаю DbUnit.
DbUnit Maven Plugin
похоже поддерживает только DML, а не DDL. В то время как SQL Maven Plugin
поддерживает как DML, так и DDL, что удобно, чтобы сначала создать схему, а затем инициализировать данные, как через maven.
- person Pat; 10.09.2014
Я добавляю следующее в pom.
<build>
<extensions>
<extension>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.7</version>
</extension>
<extension>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<components>
<component>
<name>hbm2java</name>
<implementation>annotationconfiguration</implementation>
<outputDirectory>/src/main/java</outputDirectory>
</component>
</components>
<componentProperties>
<jdk5>true</jdk5>
<export>false</export>
<drop>true</drop>
<outputfilename>schema.sql</outputfilename>
</componentProperties>
</configuration>
<executions>
<execution>
<id>generate-ddl</id>
<phase>process-classes</phase>
<goals>
<!--Genera Esquema-->
<goal>hbm2ddl</goal>
<!--Genera Clases -->
<!-- <goal>hbm2java</goal> -->
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>create-schema</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<autocommit>true</autocommit>
<srcFiles>
<srcFile>target/hibernate3/sql/schema.sql</srcFile>
</srcFiles>
</configuration>
</execution>
<execution>
<id>drop-db-after-test</id>
<phase>test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<autocommit>true</autocommit>
<sqlCommand>DROP SCHEMA public CASCADE</sqlCommand>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.7</version>
</dependency>
</dependencies>
<configuration>
<driver>org.hsqldb.jdbcDriver</driver>
<username>sa</username>
<password></password>
<url>jdbc:hsqldb:file:etc/out/test.db;shutdown=true</url>
<autocommit>true</autocommit>
<skip>${maven.test.skip}</skip>
</configuration>
</plugin>
</plugins>
</build>
и следующее для моего источника данных:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" lazy-init="true"
destroy-method="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:file:etc/out/test.db;shutdown=true" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
Мы делаем это с помощью Maven под Hudson с профилем, который запускает плагин maven-antrun-plugin на этапе ресурсов-процессов-тестов. В нашем случае maven-antrun-plugin запускает класс Java, который генерирует схему, но, конечно, есть и другие варианты. Это выглядит так:
<profile>
<id>dev</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>generate-database-schema-new</id>
<phase>process-test-resources</phase>
<configuration>
<tasks>
...
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>