2

我正在寻找一种为我的黄瓜测试激活弹簧配置文件的好方法。黄瓜测试需要使用服务的存根版本,该版本标记为:

@Profile("test")
@Component
class FooServiceStub extends FooService {...}

常规服务如下所示:

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

我的要求:

  • 使用 mvn 运行黄瓜测试: $ mvn test
  • 在 IDE 中运行黄瓜测试
  • 在构建服务器上运行黄瓜测试
  • 无需使用 -Dspring.profiles.active=... 参数

我找到但不能解决我的问题的来源:

4

2 回答 2

3

2021 年 10 月更新:

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


原答案:

我已经通过在 FeatureStep 类中添加的注释解决了这个问题。

注释:

注意上面的@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 {
}

配置类非常基础:

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

}

使用注释:

将注释添加到特征步骤:

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

现在,当从我的 IDE、使用 maven 的命令行或在构建服务器上运行 Cucumber 功能测试时,我的测试正在使用 FooServiceSTub 并且我的测试通过了。

于 2017-04-04T09:29:25.857 回答
3

在较新的黄瓜版本(6.11.0)中,您需要一个具有弹簧配置的类,并且您必须注释该类,而不是步骤定义

@ActiveProfiles("test")
@CucumberContextConfiguration
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class CucumberSpringConfiguration {
}
于 2021-10-04T13:48:06.403 回答