gpt4 book ai didi

java - 我可以创建一个 Spring bean 作为我的 cucumber 步骤定义的一部分吗?

转载 作者:行者123 更新时间:2023-12-04 07:45:53 25 4
gpt4 key购买 nike

在某些情况下,我的 Spring Boot 应用程序使用 LocalDate.now() 调用提供当前日期的外部 API。并检索回各种信息。我们正在使用 Cucumber 进行测试,上面在编写步骤定义时会出现问题,例如

Given external api "/some/endpoint/2021-04-21" returns csv
| currency |
| GBP |
步骤定义测试代码使用 wiremock 来模拟该调用,但由于我们使用的是 LocalDate.now()在生产代码中,测试将在 2021-04-21 以外的任何一天失败。
我解决这个问题的方法是为 Clock 定义两个 bean。然后我们可以自动连接到需要它们的服务并使用 LocalDate.now(clock) . “真正的”bean 定义如下:
@Configuration
public class ClockConfiguration {
@Bean
public Clock clock() {
return Clock.systemDefaultZone();
}
}
测试 bean 像这样:
@Profile("cucumber")
@TestConfiguration
public class ClockConfiguration {
@Bean
public Clock clock() {
return Clock.fixed(Instant.parse("2021-02-26T10:00:00Z"), ZoneId.systemDefault());
}
}
这解决了我的问题并允许我为我的测试设置一个定义的时间,但我的问题是日期/时间是在测试配置中定义的。我想将它定义为我的步骤定义的一部分。例如类似的东西
Given now is "2021-02-26T10:00:00Z"
有一个沿线的步骤定义
@Given("now is {string})
public void setDateTime(String dateTime) {
//Create Clock bean here...
}
有没有办法让我做到这一点?或者甚至在 cucumber 步骤中覆盖现有的 bean?

最佳答案

尝试用变量或静态方法替换日期,其响应可以通过步骤定义进行更改。

@Profile("cucumber")
@TestConfiguration
public class ClockConfiguration {
@Bean
public Clock clock() {
return Clock.fixed(Instant.parse(TestScope.getDateValue()), ZoneId.systemDefault());
}
}
@Given("now is {string})
public void setDateTime(String dateTime) {
TestScope.setDateValue(dateTime);
}

关于java - 我可以创建一个 Spring bean 作为我的 cucumber 步骤定义的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67199564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com