在非测试环境中,我可以将bean设置为使用 schema.sql
这样地
@Bean
ConnectionFactoryInitializer initializer(@Qualifier("connectionFactory") ConnectionFactory connectionFactory) {
ConnectionFactoryInitializer initializer = new ConnectionFactoryInitializer();
initializer.setConnectionFactory(connectionFactory);
initializer.setDatabasePopulator(new ResourceDatabasePopulator(new ClassPathResource("schema.sql")));
return initializer;
}
问题是,我想这样做,但出于测试目的。我正在尝试对数据库进行某种集成测试,以便将模式也插入到虚拟数据库中。
我尝试过使用此注解,但仍然无法执行
@Sql(scripts = "classpath:schema.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
我已经创建了一个单独的 application-test.properties
在包含此属性值的“我的测试资源”文件夹中
spring.r2dbc.url=r2dbc:postgresql://localhost:5432/test
spring.r2dbc.username=postgres
logging.level.org.springframework.r2dbc=DEBUG
并添加了 @ActiveProfiles(profiles = "test")
还有注解。
2条答案
按热度按时间0wi1tuuw1#
我发现这是准备数据库测试环境的最简单方法
并在
@Before
要在测试上运行的注解例如,这就是我的结局
tvokkenx2#
我想
@Sql
现在只适用于jdbc。要针对测试目的数据库测试r2dbc,请考虑testcontainers,它允许您在运行测试时在docker中启动数据库。testcontainers本身与springboot和r2dbc有很好的集成。
注:有一个特殊的
tc
在url字符串中。将相关依赖项添加到pom.xml中。不要忘记将相关的jdbc驱动程序添加到测试范围中。r2dbc testcontainers连接测试需要它。
然后使用
@DataR2dbcTest
测试r2dbc相关代码。完整的例子,检查这里。