如何使用 cucumber 激活 spring 引导配置文件
How to activate spring boot profile with cucumber
我正在寻找一种为我的黄瓜测试激活 spring 配置文件的好方法。
Cucumber 测试需要使用标记为:
的服务存根版本
@Profile("test")
@Component
class FooServiceStub extends FooService {...}
常规服务是这样的:
@Profile("prod")
@Component
class FooService {...}
我的要求:
- 运行 用 mvn 测试黄瓜:$ mvn test
- 运行 黄瓜测试 IDE
- 运行 构建服务器上的黄瓜测试
- 无需使用 -Dspring.profiles.active=... 参数
我找到但没有解决我的问题的资源:
- http://www.baeldung.com/cucumber-spring-integration(使用带有 SpringApplicationContextLoader.class 的 @ContextConfiguration 加载器,在撰写本文时,最新版本的 Spring Boot,1.5.2.RELEASE 中不存在。 )
- programatically set Spring profile in Cucumber
(搞乱系统属性)
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 {
}
我正在寻找一种为我的黄瓜测试激活 spring 配置文件的好方法。 Cucumber 测试需要使用标记为:
的服务存根版本@Profile("test")
@Component
class FooServiceStub extends FooService {...}
常规服务是这样的:
@Profile("prod")
@Component
class FooService {...}
我的要求:
- 运行 用 mvn 测试黄瓜:$ mvn test
- 运行 黄瓜测试 IDE
- 运行 构建服务器上的黄瓜测试
- 无需使用 -Dspring.profiles.active=... 参数
我找到但没有解决我的问题的资源:
- http://www.baeldung.com/cucumber-spring-integration(使用带有 SpringApplicationContextLoader.class 的 @ContextConfiguration 加载器,在撰写本文时,最新版本的 Spring Boot,1.5.2.RELEASE 中不存在。 )
- programatically set Spring profile in Cucumber (搞乱系统属性)
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 {
}