Search code examples
javamysqlspringspring-test

How to populate database only once before @Test methods in spring test?


My next problem testing spring service layer with junit4 is: How to call script that populates database only once before all @Test methods: I want to execute this once before all @Tests:

JdbcTestUtils.executeSqlScript(jdbcTemplate(), new FileSystemResource(
"src/main/resources/sql/mysql/javahelp-insert.sql"), false);

I tried to use @PostConstruct on my GenericServiceTest class(extended by test classes). It turned out that @PostConstruct is called every time before every @Test method. Interesting is that even methods annotated @Autowired of GenericServiceTest are called before every @Test method.

I don't want to populate database before every test class but only once at spring-test startup.

How to execute above method only once before all @Test methods with spring testing framework and junit4?

Thank you!


Solution

  • Use Springs Embedded Database Support

    <jdbc:embedded-database id="dataSource">
        <jdbc:script location="classpath:myScript.sql"/>
        <jdbc:script location="classpath:otherScript.sql"/>
    </jdbc:embedded-database>
    

    or Springs Initialize Database Support

    <jdbc:initialize-database data-source="dataSource">
        <jdbc:script location="classpath:myScript.sql"/>
        <jdbc:script location="classpath:otherScript.sql"/>
    </jdbc:initialize-database>
    

    @See http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html#jdbc-embedded-database-support