【发布时间】:2018-11-30 11:42:11
【问题描述】:
我有一个带有弹簧靴的黄瓜测试设置。有大量的集成测试需要一段时间才能运行。因为它们共享一个数据库,所以 cucumber 4+ 中的新线程模式不起作用(如预期的那样)。
理想情况下,这也适用于 Junit。
对于每个测试,我想创建一个动态数据源,其中包含一个新的数据库/数据源实例,测试可以独立于其他实例使用,允许它运行多线程(并使用我可用的 12 个内核)。
我在 DataSource bean 上尝试过 @Scope("cucumber-glue") 和 @Scope("prototype"),但这会导致 org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'dataSource': Requested bean is currently in creation: Is there an unresolvable circular reference?。
如果我使用原型作用域,每次都会调用 bean 创建方法,但会出现此错误,胶水作用域也是如此。
我还在类和方法中添加了@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD),但没有范围,但这似乎无济于事。
有没有办法可以: 1.为每个测试创建一个新的数据源并让hibernate创建表? 2. 汇集一组可供测试使用的数据源? 3. 相应地填充/重新初始化上下文?
这样做的一个副作用是,我不相信我的上下文在针对范围界定的其他实例的测试之间被正确地重新创建。
@Configuration
public class H2DynamicDataSource {
@Autowired
private Environment env;
@Bean
@Scope("prototype")
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.build();
}
}
干杯 回复
【问题讨论】:
标签: spring junit cucumber datasource h2