Cucumber 7.13.0+JUnit5中Maven命令指定Feature路径不生效
解决Cucumber 7.x + JUnit 5命令行指定Feature路径不生效的问题
问题根源
你之前的TestRunner硬编码了Feature路径配置(不管是@SelectClassPathResource还是@ConfigurationParameter里的cucumber.features/cucumber.options),而JUnit Platform的静态注解配置优先级高于命令行参数,导致你通过mvn test传入的路径被忽略,始终运行local目录下的用例。同时,你使用的命令行参数格式有误,cucumber.options需要配合--features参数才能正确指定路径,而非直接写路径字符串。
解决方案
1. 修正TestRunner配置
移除所有硬编码的Feature路径相关配置,只保留核心的引擎和glue配置,让命令行参数可以动态指定路径:
@Suite @IncludeEngine("cucumber") @ConfigurationParameter(key = "cucumber.glue", value = "com.mytests") public class TestRunner { }
2. 使用正确的命令行参数格式
有两种有效方式可以指定Feature路径:
方式一(推荐,符合JUnit Platform规范)
直接通过cucumber.features系统属性指定,路径使用classpath:前缀(因为src/test/resources属于类路径):
mvn test -Dcucumber.features=classpath:features/dev
方式二(兼容旧版cucumber.options)
如果习惯用cucumber.options,需要加上--features参数:
mvn test -Dcucumber.options="--features classpath:features/dev"
3. 可选:设置默认Feature路径
如果需要在未指定命令行参数时默认运行某个路径,可以在TestRunner中添加默认配置,命令行参数会自动覆盖这个默认值:
@Suite @IncludeEngine("cucumber") @ConfigurationParameter(key = "cucumber.glue", value = "com.mytests") @ConfigurationParameter(key = "cucumber.features", value = "classpath:features/local") public class TestRunner { }
此时,运行mvn test会默认执行local目录用例,运行mvn test -Dcucumber.features=classpath:features/dev则会覆盖默认值执行dev目录用例。
内容的提问来源于stack exchange,提问作者Evra
相关产品推荐
相关产品推荐

