我想用junit5-docker和Spring测试@Sql注释运行测试来对postgresql本机查询进行单元测试(我不能在这里使用HSQL DB)。
我的问题是使用Spring @Sql注释插入的脚本是在docker容器创建结束之前执行的。
我无法找到一种可接受的方式来订购这些元素,以便在容器可用后立即执行@Sql。
当然我们可以在DataSource创建中使用Thread.sleep(...),但这不是我想做的......
编辑: 测试例(Kotlin):
@Docker(image = "postgres:9.6", ports = [Port(exposed = 5433, inner = 5432)],
environments = [
Environment(key = "POSTGRES_DB", value = "nv2test"),
Environment(key = "POSTGRES_USER", value = "postgres"),
Environment(key = "POSTGRES_PASSWORD", value = "postgres")],
waitFor = WaitFor("LOG: database system is ready to accept connections"),
newForEachCase = false)
@Sql(scripts = ["/data/clear.sql", "/data/operations.sql"])
@ExtendWith(SpringExtension::class)
@TestExecutionListeners(SqlScriptsTestExecutionListener::class, DependencyInjectionTestExecutionListener::class)
@ContextConfiguration(classes = [DockerContainerConfig::class])
class OperationSearchRepositoryImplTest{
@Test
fun shouldFindByExample() {
// Some test...
}
}
DockerContainerConfig是一个Spring配置类,它只为postgres定义一个DataSource。
任何帮助将不胜感激!