No description, website, or topics provided.
Clone or download
florian.eska
Latest commit c1872d1 Oct 17, 2018

README.md

flyway-test-extensions

flyway-test-extension logo

Test extensions for the Flyway project

For Flyway's features, see the Flyway Db Org Page

Version 5.0.0 Released

2017-12-28 flyway-test-extensions version 5.0.0 released.

Version number 5.0.x are used to show the dependency to Flyway version 5.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.
    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 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>5.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})
@ContextConfiguration(locations = { "/context/simple_applicationContext.xml" })
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
		FlywayTestExecutionListener.class })
@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

Notes

  • The project depends on flyway version 5.0.2
  • 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)
    • All features works with Spring version 3.x
    • It works also with Spring version 2.5.6, but you can not use all features. A example project show how to use it with Spring 2.5.6
  • At the moment the code is tested with database H2 and Oracle.
    Only the DBunit part contains database specific code.