flyway-test-extensions
Test extensions for the Flyway project
For Flyway's features, see the Flyway Db Org Page
Version 9.5.0 Released
2023-04-08 flyway-test-extensions version 9.5.0 released.
Version number 9.5.x are used to show the dependency or compatibility to Flyway version 9.5.x. The main feature can also be used with older features, see the corresponding examples.
See also Release Notes
Central maven repository under http://search.maven.org/#search|ga|1|flyway-test-extensions contains all project jars.
Project
This extension gives the ability to reset and/or fill the database with defined content.
With this precondition, each test provides a reproducible database start point.
-
Annotation
FlywayTest
for database unit testing. Use Flyway feature.- clean - execution of flyway task clean
- init - execution of flyway task init
- migrate - execution of flyway task migrate
-
Annotation
FlywayTest
for a single database control.
AnnotationFlywayTests
if more than one database must be controlled during a test.
Annotations can be usedTest Setup Junit 4 Junit 5 TestNG Once per Class ✅ ✅ ✅ Once per Class with test annotation @BeforeClass
@BeforeAll
@BeforeClass
Once per Method @Before
@BeforeEach
@BeforeMethod
per Method @Test
@Test
@Test
-
Sample projects on how to use the annotations inside a unit testing environment
- Spring 5.x sample (see complete sample for usage together with Spring 5 )
- Spring 4.x sample (see UsageFlywaySpringTest4 )
- SpringBoot 2 test example (see FlywayTestApplicationTest )
- SpringBoot 3 test example (see FlywayTestApplicationTest )
- JUnit5 test example (see Junit5SpringTest )
- TestNG test example (see BeforeMethodTest )
-
Additional project supports a DBUnit annotation use together with FlywayTest DBUnitSupport. A usage example you will find at UsageFlywayDBUnitTest.
How to use it
The flyway test extensions are available at Maven Central.
For a detail usage description see the UsageFlywaySpringTest usage page.
Attention:
- this version has a default dependency on Spring 6. Examples show also how to use it with older versions.
- The project is build with Java 8 compiler settings for backward compatibility.
If other compiler classes are needed use flyway-test-spring5 or flyway-test-spring4. - Important: for usage with Flyway version 9, and spring properties
spring.flyway.clean-disabled=false
should be set tofalse
otherwiseCleanDB
will not work.
Integration
- Add dependency to flyway-spring-test to your Maven pom file
<dependency>
<groupId>org.flywaydb.flyway-test-extensions</groupId>
<artifactId>flyway-spring-test</artifactId>
<version>9.0.0</version>
<scope>test</scope>
</dependency>
- Extend your test class with the Spring test runner annotation (Junit 4). The context file should be part of your test project.
@RunWith(SpringRunner.class)
@ContextConfiguration(locations = {"/context/simple_applicationContext.xml" })
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,
FlywayTestExecutionListener.class })
- Add the @FlywayTest annotation on each class or method were you need a clean database. You can also use the anntotation on class basis and every test method in the class where a clean database is also needed.
// usage as once per class
@FlywayTest
public class Spring4JUnitTest
// another TestClass
public class Spring4JUnitTest {
// usage as per test method
@Test
@FlywayTest
public void testMethod() {
- Add the @FlywayTests with @FlywayTest annotation on each class or method were you need a clean multiple database setup.
// usage as once per class
@FlywayTests(value = {
@FlywayTest(flywayName = "flyway1"), // Flyway configuration for database 1
@FlywayTest(flywayName = "flyway2") // Flyway configuration for database 2
})
public class Spring4JUnitTest
// another TestClass
public class Spring4JUnitTest {
// usage as per test method
@Test
@FlywayTests(value = {
@FlywayTest(flywayName = "flyway3"), // Flyway configuration for database 3
@FlywayTest(flywayName = "flyway4") // Flyway configuration for database 4
})
public void testMethod() {
- Junit 5 support is only available together with Spring5 or newer and need a different Spring setup.
A step by step setup can be found here.
@ExtendWith({SpringExtension.class})
@ExtendWith({FlywayTestExtension.class})
@ContextConfiguration(locations = { "/context/simple_applicationContext.xml" })
@FlywayTest // as class annotation
public class Junit5SpringTest ...
@BeforeEach
@FlywayTest(locationsForMigrate = {"loadmsqlbefore"}) // together with BeforeEach
public void before() {
...
@Test
@FlywayTest // as method annotation
public void testMethodLoad() {
- TestNG support is only available with Spring5 or newer and need a different Test setup.
@ContextConfiguration(locations = {"/context/simple_applicationContext.xml"})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,
FlywayTestExecutionListener.class})
@Test
@FlywayTest(locationsForMigrate = {"loadmsql"}) // execution once per class
public class MethodTest extends AbstractTestNGSpringContextTests {
@BeforeClass
@FlywayTest(locationsForMigrate = {"loadmsql"}) // execution once per class
public static void beforeClass(
@BeforeMethod
@FlywayTest(locationsForMigrate = {"loadmsql"}) // execution before each test method
public void beforeMethod(
@Test
@FlywayTest(locationsForMigrate = {"loadmsql"}) // as method annotation
public void simpleCountWithoutAny(
Project depend on
- Flyway (9.16.1), and show also examples for version 8.5.13
- Spring Framework test, context, jdbc (6.0.7, 5.2.6, 4.3.30)
Notes
- The project depends on flyway version 9.16.1
- The project will be supported until the extension will be integrated into the flyway project.
- The project depends on Spring version 6.x (see flyway-spring6-test)
- The project depends on Spring version 5.x (see flyway-spring5-test)
- The project depends on Spring version 4.x (see flyway-spring4-test and flyway-dbunit-spring4-test)
- At the moment the code is tested with database H2 and Oracle.
Only the DBunit part contains database specific code. - it shows also examples how different version from flyway can be used with Spring Boot 2.x and 3.x. See the example projects SpringBoot 2 test example (FlywayTestApplicationTest ) and SpringBoot 3 test example (FlywayTestApplicationTest )