一尘不染

使Spring Boot重新创建测试数据库

spring-boot

我如何获得Spring Boot在测试类之间从头开始重新创建内存中的测试数据库?

我已经注释了几个本地集成测试@SpringApplicationConfiguration@WebIntegrationTest这些测试会更改数据库状态。我已经用标记了每个@DirtiesContext。我期望创建内存数据库的代码将是ApplicationContext生命周期的一部分,因此在以后的任何测试中都应该创建一个新的数据库。

我在日志中看到Flyway正在尝试重新应用迁移,并认为由于数据库尚未清除,迁移已经完成。

Spring Boot是否在每个数据库之外创建内存数据库ApplicationContext并在它们之间共享数据库?有什么办法可以控制这种行为?

编辑

从Maven(而不是Eclipse)运行测试时,我也看到了奇怪的行为。我的数据库表之一是在Maven中更改状态,但在Eclipse中不更改。这可能是ClassLoader问题吗?


阅读 331

收藏
2020-05-30

共1个答案

一尘不染

指定自定义配置会产生预期的行为。

@Configuration
@EnableAutoConfiguration(exclude={
                            SecurityAutoConfiguration.class, 
                            ManagementSecurityAutoConfiguration.class,
                            DataSourceAutoConfiguration.class
                        })
@EnableJpaRepositories(basePackages = "com.example.repository")
public class TestConfig {    
    @Bean
    public String sharedSecret() {
        return null;
    }

    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.HSQL)
            .build();
    }
}

如果Pivotal的任何人都读到了这本书(Dave Syer的手机很大吗?),如果您认为这是一个错误,我可以取消一个测试项目以展示该行为。

2020-05-30