It is not completely clear to me how to best use the Maven Failsafe plugin for integration tests. My use case would be to test SQL queries against a local MySQL database.
I understand that the database should be started during the
In the regular built-in maven lifecycles (jar, war...) the
post-integration-test test phases are not bound to any maven plugin (ie. the default behavior of these phases is "do nothing"). If you want to setup and populate a database for the tests executed in the
integration-test phase you need to bind a maven plugin doing that job to these phases.
The SQL maven plugin executes SQL script in a maven build. The configuration to bind this plugin to the
pre/post-integration-phase is pretty straightforward:
plugins section of the pom.xml file, add the sql-maven-plugin
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sql-maven-plugin</artifactId> <version>1.5</version> <dependencies> <!-- include the JDBC driver dependency here --> <dependency> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> </dependency> </dependencies> <!-- common plugin configuration --> <configuration> <driver>...</driver> <url>...</url> <username>...</username> <password>...</password> <!-- other parameters --> </configuration> <!-- the executions section binds the phases with some plugin goals and optional additional configuration parameters --> <executions> <execution> <phase>pre-integration-test</phase> <goals> <goal>execute</goal> </goals> <!-- specific configuration for this execution --> <configuration> <!-- Include here the SQL scripts to create the DB, inject some test data --> </configuration> </execution> <execution> <phase>post-integration-test</phase> <goals> <goal>execute</goal> </goals> <configuration> <!-- Include here the SQL scripts to drop the database --> </configuration> </execution> [...] </executions> </plugin>
That should do the trick.