如何解决java.lang.NoSuchMethodError: io.cucumber.core.options.RuntimeOptions.isStrict()错误
异常原因
该java.lang.NoSuchMethodError异常是Cucumber核心包版本与Serenity Cucumber适配器版本不兼容导致的:
你当前使用的serenity-cucumber5:2.2.6是专门适配Cucumber 5.x系列的适配器,但你引入的io.cucumber:cucumber-java、io.cucumber:cucumber-junit版本为6.11.0,Cucumber 6版本中已经修改/移除了RuntimeOptions.isStrict()方法,适配器调用该方法时找不到对应实现就会抛出异常。
解决方案
以下两种方案二选一即可:
方案1:降低Cucumber版本至5.x系列,适配现有适配器
修改gradle.build中Cucumber版本号为适配2.2.6版本适配器的5.7.0即可:
ext{ serenity_core_version = "2.5.8" serenity_cucumber_version = "5.7.0" // 从6.11.0改为5.7.0 serenity_cucumber5_version = "2.2.6" }
其余依赖配置不需要调整。
方案2:升级Serenity Cucumber适配器,适配现有Cucumber 6版本
将适配Cucumber5的适配器替换为适配Cucumber6的版本,且保持适配器版本与Serenity Core版本一致即可:
ext{ serenity_core_version = "2.5.8" serenity_cucumber_version = "6.11.0" serenity_cucumber6_version = "2.5.8" // 新增Cucumber6适配器版本,与core版本对齐 } dependencies { compile localGroovy() compile "net.serenity-bdd:serenity-core:$serenity_core_version" compile "net.serenity-bdd:serenity-junit:$serenity_core_version" compile "io.cucumber:cucumber-java:$serenity_cucumber_version" compile "io.cucumber:cucumber-junit:$serenity_cucumber_version" compile "net.serenity-bdd:serenity-screenplay:$serenity_core_version" compile "net.serenity-bdd:serenity-screenplay-webdriver:$serenity_core_version" compile "net.serenity-bdd:serenity-emailer:2.1.0" compile "net.serenity-bdd:serenity-screenplay-rest:$serenity_core_version" // 把原来的serenity-cucumber5替换为serenity-cucumber6 compile "net.serenity-bdd:serenity-cucumber6:$serenity_cucumber6_version" // 移除重复声明的serenity-junit依赖 }
验证操作
修改配置后执行./gradlew clean build清除旧的依赖缓存,再运行测试即可解决该异常。
内容的提问来源于stack exchange,提问作者cristianccrj
相关产品推荐
相关产品推荐

