簡體   English   中英

無法從黃瓜測試中讀取 application.yml

[英]Unable to read the application.yml from cucumber test

我有一個黃瓜測試:

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


}

這是 test 沒有在 test 文件夾中定義,而是作為一個單獨的文件夾(作為源集,其他人已經創建了這個結構)。

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

為什么我無法讀取應用程序配置? 它總是空的!!

您的測試類沒有啟動 Spring,這就是您得到 null 的原因。 在這里查看https://www.baeldung.com/cucumber-spring-integration ,它展示了如何在 JUnit 測試中連接 Spring 和 Cucumber。

然后,測試類將對 Spring 和 Cucumber 進行注釋,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM