我如何获得Spring Boot在测试类之间从头开始重新创建内存中的测试数据库?
我已经注释了几个本地集成测试@SpringApplicationConfiguration,@WebIntegrationTest这些测试会更改数据库状态。我已经用标记了每个@DirtiesContext。我期望创建内存数据库的代码将是ApplicationContext生命周期的一部分,因此在以后的任何测试中都应该创建一个新的数据库。
@SpringApplicationConfiguration
@WebIntegrationTest
@DirtiesContext
ApplicationContext
我在日志中看到Flyway正在尝试重新应用迁移,并认为由于数据库尚未清除,迁移已经完成。
Spring Boot是否在每个数据库之外创建内存数据库ApplicationContext并在它们之间共享数据库?有什么办法可以控制这种行为?
编辑
从Maven(而不是Eclipse)运行测试时,我也看到了奇怪的行为。我的数据库表之一是在Maven中更改状态,但在Eclipse中不更改。这可能是ClassLoader问题吗?
指定自定义配置会产生预期的行为。
@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的手机很大吗?),如果您认为这是一个错误,我可以取消一个测试项目以展示该行为。