【问题标题】:Spring boot cucumber TestExecutionListener before database initalization数据库初始化前的Spring Boot Cucumber TestExecutionListener
【发布时间】: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


【解决方案1】:

这将不起作用,因为 Cucumber.class JUnit runner 不支持 TestExecutionListeners

您可能认为您的测试步骤由 SpringRunner.class JUnit 运行程序执行,但事实并非如此。

SpringIntegrationTest 类上的 @RunWith(SpringRunner.class) 注释在这里基本上没用,因为根据您的帖子,SpringIntegrationTest 的子类包含 Cucumber 步骤。但是 SpringRunner 需要 JUnit @Test 方法。带有@Given@When@Then 等的黄瓜步骤将被忽略,因为SpringRunner 不知道如何处理它们。

真正执行您的测试步骤的是CucumberIntegration 类中的@RunWith(Cucumber.class) 注释。但是,Cucumber 跑步者并不关心您的步骤定义类继承自 SpringIntegrationTestTestExecutionListeners 注释,因为它不支持这样的功能。

执行侦听器是 Spring 独有的功能。你将无法做你想做的事,至少只要你使用 Cucumber。

【讨论】:

    猜你喜欢
    • 2016-11-10
    • 1970-01-01
    • 2018-02-14
    • 2017-07-29
    • 2022-01-18
    • 2018-03-22
    • 2017-10-16
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多