【问题标题】:Unable to read the application.yml from cucumber test无法从黄瓜测试中读取 application.yml
【发布时间】:2021-07-19 05:08:59
【问题描述】:

我有一个黄瓜测试:

@RunWith(CucumberWithSerenity.class)
@UsePersistantStepLibraries
@CucumberOptions(
        features = "src/integrationTest/resources/features/",
        glue = {"com/myorg/proj/integrationtest/stepdefinitions"},
        plugin = {"pretty", "summary"}
)
public class integrationTestRunner extends ParentClassWithAllMethods {


}

这是测试不是在测试文件夹中定义的,而是作为一个单独的文件夹(作为源集,并且其他人已经创建了这个结构)。

sourceset(测试所在)的gradle配置如下:

sourceSets {
    integrationTest {
        java {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir file('src/integrationTest/java')
        }
        resources.srcDir file('src/integrationTest/resources')
    }
}

// Dependencies for integrationTest
dependencies {
    integrationTestCompileOnly 'org.projectlombok:lombok:1.18.12'
    integrationTestAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
    integrationTestCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.4.2'
    integrationTestImplementation 'net.serenity-bdd:serenity-core:2.2.13'
    integrationTestImplementation 'net.serenity-bdd:serenity-cucumber5:2.2.5'
    integrationTestImplementation 'net.serenity-bdd:serenity-rest-assured:2.2.13'
    integrationTestImplementation 'org.assertj:assertj-core:3.8.0'
    integrationTestImplementation 'org.slf4j:slf4j-simple:1.7.7'

}

task integrationTest(type: Test) {
    doFirst {
        systemProperty 'param1', 
        System.getProperty('param1')
        param1 = System.getProperty('param1')
        if (param1 == null)
          throw new GradleException("Parameter not passed ./gradlew -DParam<VALUE> ")
    }
    testClassesDirs = sourceSets.integrationTest.output.classesDirs
    classpath = sourceSets.integrationTest.runtimeClasspath
    outputs.upToDateWhen { false }
    finalizedBy aggregate
}

查看 gradle 文件,发生了 3 件事,

  1. 有一个源集定义为integrationTest
  2. compileCLassPath , runTimeClassPath, srcDir 已经被定义为相同的
  3. 甚至还设置了 resources.srcDir(我有应用程序 ymls)

我在资源文件夹中创建了 application.yml、application-integrationTest.yml,但仍然无法使用 @Value 读取任何属性。

例如:

public class ParentClassWithAllMethods {

  @Value("${custom.parameter}")
  private String customParameter;

  public ResponseOptions<Response> getMethod() {

        String debugVal = customParameter;
  }
.....
}

当运行测试时,我期望得到在我的 yml 文件中定义的值,但它为空。

YML 文件长这样,

自定义: 参数:https://something.com

为什么我无法读取应用程序配置?它始终为空!!

【问题讨论】:

    标签: java spring-boot configuration cucumber


    【解决方案1】:

    你的测试类没有开始 Spring,这就是你得到 null 的原因。看看这里https://www.baeldung.com/cucumber-spring-integration,它展示了如何在 JUnit 测试中连接 Spring 和 Cucumber。

    然后,测试类将具有 Spring 和 Cucumber 的注释,如下所示:

    @CucumberContextConfiguration
    @SpringBootTest
    public class SpringIntegrationTest {
       // executeGet implementation
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 2022-11-28
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多