如何使用 cucumber 激活 spring 引导配置文件

How to activate spring boot profile with cucumber

我正在寻找一种为我的黄瓜测试激活 spring 配置文件的好方法。 Cucumber 测试需要使用标记为:

的服务存根版本
@Profile("test")
@Component
class FooServiceStub extends FooService {...}

常规服务是这样的:

@Profile("prod")
@Component
class FooService {...}    

我的要求:

我找到但没有解决我的问题的资源:

2021 年 10 月更新:

以下答案已过时,不再被接受。请改为检查实际接受的答案!


原回答:

我已经通过在 FeatureStep class 上添加注释解决了这个问题。

注释:

注意上面的@ActiveProfiles

import java.lang.annotation.*;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@ContextConfiguration
@ActiveProfiles("test")
@SpringBootTest(
    webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, 
    classes = FeatureTestConfiguration.class)
public @interface FeatureFileSteps {
}

配置class非常基础:

@Configuration
@Import(FooApplication.class)
public class FeatureTestConfiguration {

}

使用注释:

将注释添加到特征步骤:

@FeatureFileSteps
public class FooFeatureSteps {
    @Given(...)
    @When(...)
    @Then(...)
}

现在,当 运行 Cucumber 功能测试时,无论是从我的 IDE,从带有 maven 的命令行还是在构建服务器上,我的测试都使用 FooServiceSTub 并且我的测试通过了。

在较新的黄瓜版本 (6.11.0) 中,您需要 class 和 spring 配置,并且您必须注释那个,而不是步骤定义

@ActiveProfiles("test")
@CucumberContextConfiguration
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class CucumberSpringConfiguration {
}