cucumber-junit-platform-engine 中的特征文件发现
Feature files discovery in cucumber-junit-platform-engine
在 cucumber-junit
库中,我使用 @CucumberOptions
定义功能文件位置:
package com.mycompany.cucumber;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = ...,
features = "classpath:.", // my java step definitions are in package com.mycompany.cucumber
// but feature files directly in test resources
// resources/is_it_friday_yet.feature
tags = ...,
glue = ...
)
public class CucumberRunner {
}
我 运行 我正在使用自定义 gradle 任务进行测试 cucumberTest
cucumberTest {
useJUnitPlatform()
}
迁移到 cucumber-junit-platform-engine
后,不再支持 @CucumberOptions
。
package com.mycompany.cucumber;
import io.cucumber.junit.platform.engine.Cucumber;
@Cucumber
public class CucumberRunner {
}
我可以通过将 plugin
、tags
、glue
选项替换为属性 cucumber.filter.tags
、cucumber.glue
、cucumber.plugin
来使其工作。
features
属性呢?如果我更改功能文件位置以匹配包名称,即 resources/com/mycompany/cucumber/is_it_friday_yet.feature
,它工作正常。这仍然是一个简单的案例,我有更多的测试包没有放在与源代码相同的位置,我无法移动它们。
Gradle doesn't support non-class based test engines. However you can create a custom task that uses the JUnit Platform ConsoleLauncher. You can then use the Junit 5 selectors that are supported by Cucumber 到 select 您的功能。例如 FileSelector
和 --select-file
.
val consoleLauncherTest by tasks.creating(JavaExec::class) {
dependsOn("testClasses")
val reportsDir = file("$buildDir/test-results")
outputs.dir(reportsDir)
classpath(sourceSets["test"].runtimeClasspath)
main = "org.junit.platform.console.ConsoleLauncher"
args("--select-file", "path/to.feature")
args("--details", "tree")
args("--reports-dir", reportsDir)
}
在 cucumber-jvm v7 中,@Cucumber
注释已弃用,我们鼓励您使用常规的 @Suite
注释。这意味着您可以 也 使用 @SelectClasspathResource
之类的注释来更改功能文件的位置。这对我有用:
@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("features")
@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "com.mycompany.cucumber")
public class CucumberIT {
}
它会在我的资源文件夹(类路径)
的 features/
目录下获取我所有的 .feature 文件
junit-platform 还支持其他各种 @Select*
注释,我假设这些注释也有效(尽管它们被标记为实验性的,因此可能会发生变化):https://junit.org/junit5/docs/current/user-guide/#api-evolution-experimental-apis
在 cucumber-junit
库中,我使用 @CucumberOptions
定义功能文件位置:
package com.mycompany.cucumber;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = ...,
features = "classpath:.", // my java step definitions are in package com.mycompany.cucumber
// but feature files directly in test resources
// resources/is_it_friday_yet.feature
tags = ...,
glue = ...
)
public class CucumberRunner {
}
我 运行 我正在使用自定义 gradle 任务进行测试 cucumberTest
cucumberTest {
useJUnitPlatform()
}
迁移到 cucumber-junit-platform-engine
后,不再支持 @CucumberOptions
。
package com.mycompany.cucumber;
import io.cucumber.junit.platform.engine.Cucumber;
@Cucumber
public class CucumberRunner {
}
我可以通过将 plugin
、tags
、glue
选项替换为属性 cucumber.filter.tags
、cucumber.glue
、cucumber.plugin
来使其工作。
features
属性呢?如果我更改功能文件位置以匹配包名称,即 resources/com/mycompany/cucumber/is_it_friday_yet.feature
,它工作正常。这仍然是一个简单的案例,我有更多的测试包没有放在与源代码相同的位置,我无法移动它们。
Gradle doesn't support non-class based test engines. However you can create a custom task that uses the JUnit Platform ConsoleLauncher. You can then use the Junit 5 selectors that are supported by Cucumber 到 select 您的功能。例如 FileSelector
和 --select-file
.
val consoleLauncherTest by tasks.creating(JavaExec::class) {
dependsOn("testClasses")
val reportsDir = file("$buildDir/test-results")
outputs.dir(reportsDir)
classpath(sourceSets["test"].runtimeClasspath)
main = "org.junit.platform.console.ConsoleLauncher"
args("--select-file", "path/to.feature")
args("--details", "tree")
args("--reports-dir", reportsDir)
}
在 cucumber-jvm v7 中,@Cucumber
注释已弃用,我们鼓励您使用常规的 @Suite
注释。这意味着您可以 也 使用 @SelectClasspathResource
之类的注释来更改功能文件的位置。这对我有用:
@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("features")
@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "com.mycompany.cucumber")
public class CucumberIT {
}
它会在我的资源文件夹(类路径)
的features/
目录下获取我所有的 .feature 文件
junit-platform 还支持其他各种 @Select*
注释,我假设这些注释也有效(尽管它们被标记为实验性的,因此可能会发生变化):https://junit.org/junit5/docs/current/user-guide/#api-evolution-experimental-apis