【发布时间】:2018-07-25 03:48:11
【问题描述】:
我想在黄瓜测试开始之前使用 docker 创建集成测试。灵感来源:http://tech.asimio.net/2016/08/04/Integration-Testing-using-Spring-Boot-Postgres-and-Docker.html
但在我的情况下,TestExecutionListener 在数据库初始化之前没有启动。我使用 Flyway 进行数据库迁移,它似乎首先尝试初始化。为此需要一个不可用的数据库连接,因为没有执行 TestExecutionListener。
这些是我的课程:
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = {"json:target/integration-cucumber.json"},
features = "src/test/resources"
)
public class CucumberIntegration {
}
还有我将通过黄瓜步骤扩展的测试类:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@SpringBootConfiguration
@ContextConfiguration
@TestPropertySource(locations="classpath:application.properties")
@TestExecutionListeners({
DockerizedTestExecutionListener.class,
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class
})
public class SpringIntegrationTest {
}
当我将 @SpringBootTest(classes = Application.class) 更改为 @SpringBootTest 时,我看到 DockerizedTestExecutionListener 正在执行。只是它失败了,因为它错过了来自Application.class 的配置。
有人知道如何使用或不使用 TestExecutionListener 吗?
【问题讨论】:
-
我是这篇文章的作者,使用带有种子数据的 Docker 映像的想法是假设每个集成测试的数据库迁移/种子数据比启动 Docker 容器更昂贵。您为什么要尝试使用 Cucumber 和 Flyway 来完成?
-
@ootero 我们已经使用黄瓜来验证业务逻辑。有了这个,我还想测试迁移脚本(flyway)以在早期阶段发现问题。同样对于很多特性文件,spring 只启动一次,所以我们不必为每个特性/场景迁移。
标签: java spring spring-boot cucumber-jvm