flyway-test-extensions
Test extensions for the Flyway project
For Flyway's features, see the Flyway Db Org Page
Version 7.0.0 Released
2020-10-22 flyway-test-extensions version 7.0.0 released.
Version number 7.0.x are used to show the dependency to Flyway version 7.0.x.
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 )
- Spring 3.x sample
- SpringBoot 2 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 dependency on Spring 5.
- The project is build with Java 8 compiler settings simular to Flyway project.
If other compiler classes are needed use flyway-test-spring4 or flyway-test-spring3.
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>7.0.0</version>
<scope>test</scope>
</dependency>
- Extend your test class with the Spring test runner annotation (Junit 4).
@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 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 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 (7.0.0)
- Spring Framework test, context, jdbc (5.2.6, 4.3.25, 3.2)
Notes
- The project depends on flyway version 7.0.4
- The project will be supported until the extension will be integrated into the flyway project.
- 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)
- The project depends on Spring version 3.2 (see flyways-swpring3-test and flyway-dbunit-spring3-test)
- At the moment the code is tested with database H2 and Oracle.
Only the DBunit part contains database specific code.