我正在尝试在 JUnit 5 Jupiter 中运行 Cucumber 功能。我从 Cucumber-jvm 源代码中提取了一些代码,并将其改编为 JUnit 5 的TestFactory
. 它正在运行:当我运行所有 JUnit 测试时,我看到我的功能正在运行(这是 Kotlin 代码,但同样适用于 Java):
@CucumberOptions(
plugin = arrayOf("pretty"),
features = arrayOf("classpath:features")
)
class Behaviours {
@TestFactory
fun loadCucumberTests() : Collection<DynamicTest> {
val options = RuntimeOptionsFactory(Behaviours::class.java).create()
val classLoader = Behaviours::class.java.classLoader
val resourceLoader = MultiLoader(classLoader)
val classFinder = ResourceLoaderClassFinder(resourceLoader, classLoader)
val runtime = Runtime(resourceLoader, classFinder, classLoader, options)
val cucumberFeatures = options.cucumberFeatures(resourceLoader)
return cucumberFeatures.map<CucumberFeature, DynamicTest> { feature ->
dynamicTest(feature.gherkinFeature.name) {
var reporter = options.reporter(classLoader)
feature.run(options.formatter(classLoader), reporter, runtime)
}
}
}
}
然而,JUnit 报告说每个特性都是成功的,不管它是否真的成功。当功能失败时,结果会正确打印出来,但生成的结果会DynamicTest
通过。Intellij都gradle test
没有注意到错误:我必须检查文本输出。
我想我必须弄清楚,Executable
作为第二个参数传递给dynamicTest
,该功能的结果是什么,并在适当的时候提出一个断言。我如何确定feature
或feature.gherkinFeature
当时的结果?
有没有办法获得功能中每个场景的结果?或者更好的是,有没有办法运行一个特定的场景,这样我就可以为每个场景创建一个 DynamicTest,在 JUnit 中给我更好的报告粒度?