使用 Cucumber JUnit5 引擎选择单个测试失败

Selecting a single test with Cucumber JUnit5 engine fails

考虑这个简单的项目:https://github.com/ekalin/cucumber-junit5-gradle。它包含 Cucumber 功能,使用 JUnit5。

按照 https://github.com/cucumber/cucumber-jvm/tree/master/junit-platform-engine 的说明,我创建了一个带有 @Cucumber 注释的 class,以便可以发现测试。当我 运行 ./gradlew test 时,该功能被发现并且 运行.

但是如果我尝试 select 仅使用 ./gradlew test --tests cucumber.junit5.gradle.SampleSteps 进行测试(或使用其他方式进行 select 测试),我会收到此错误:

Execution failed for task ':test'.
> No tests found for given includes: [cucumber.junit5.gradle.SampleSteps](--tests filter)

我试过将 includeEngines("cucumber") 添加到 useJUnitPlatform,但没有任何区别。

是否有一些配置允许 select 在使用不同的引擎时进行单个测试?

Gradle 尚不支持发现或过滤基于非 class 的测试(参见:gradle/#4773)。相反 Gradle 要求 JUnit 平台发现测试包中所有 classes 中的测试。 @Cucumber 注释是一种解决方法,用于发现带注释的 class 包中的所有功能文件。

当您使用 --tests cucumber.junit5.gradle.SampleSteps 时,您将对所有测试结果应用基于 class 的过滤器。因为 @Cucumber 注释的 class 是一个变通方法,它不是已发现测试的一部分,并且因为功能文件没有 ClassSource 而是 FileSource gradle 将全部排除。

您目前可以做的最好的事情是使用 gradle/#4773 中建议的解决方法。您可能还想请求 Gradle 团队提供与 JUnit 平台的更好集成,以便可以使用其所有功能。