• Stars
    star
    127
  • Rank 282,790 (Top 6 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created about 11 years ago
  • Updated 10 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

flyway-test-extensions

flyway-test-extension logo

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.
    Annotation FlywayTests if more than one database must be controlled during a test.
    Annotations can be used

    Test 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

  • 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 to false otherwise CleanDB 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 )