Cucumber 2 升级至Cucumber 7:Transformer与@Transform迁移咨询
Cucumber 2 升级到 Cucumber 7:Transformer 与 @Transform 迁移方案
Cucumber 7 已经彻底移除了旧版的 Transformer 抽象类和 @Transform 注解,需要改用新的类型转换机制来实现相同功能。以下是两种可行的迁移方案:
方案一:直接用 @ParameterType 定义转换逻辑(适合简单场景)
这种方式无需额外的转换器类,直接在步骤类里定义参数的转换规则,代码更简洁:
import io.cucumber.java.ParameterType; import io.cucumber.java.en.And; import cucumber.runtime.java.guice.ScenarioScoped; import java.util.Optional; @ScenarioScoped public class StepDefinitions { // 定义参数类型,匹配正则分组的结果,转换为 Optional<String> @ParameterType("(not)?") public Optional<String> optionalString(String input) { return Optional.ofNullable(input); } @And("^Some ?(not)? step?$") public void someStep(Optional<String> example) { // Step code } }
说明:@ParameterType 的值要和步骤正则里的分组匹配,这里的"(not)?"对应原步骤中的分组,转换方法会自动把匹配到的字符串转为Optional<String>,步骤方法直接声明参数类型即可。
方案二:用 TypeConverter 结合 TypeRegistryConfigurer(适合复用转换逻辑)
如果需要在多个步骤类里复用相同的转换逻辑,可以单独定义转换器并全局注册:
1. 实现 TypeConverter
import io.cucumber.core.api.TypeConverter; import java.util.Optional; public class OptionalStringConverter implements TypeConverter<String, Optional<String>> { @Override public Optional<String> convert(String input) { return Optional.ofNullable(input); } }
2. 注册转换器
创建配置类把转换器注册到Cucumber的类型注册表:
import io.cucumber.core.api.TypeRegistry; import io.cucumber.core.api.TypeRegistryConfigurer; import java.util.Locale; public class TypeRegistryConfiguration implements TypeRegistryConfigurer { @Override public Locale locale() { return Locale.ENGLISH; } @Override public void configureTypeRegistry(TypeRegistry typeRegistry) { // 注册String到Optional<String>的转换器 typeRegistry.addTypeConverter(String.class, Optional.class, new OptionalStringConverter()); } }
3. 简化步骤类
步骤方法无需任何额外注解,直接声明参数类型即可:
import io.cucumber.java.en.And; import cucumber.runtime.java.guice.ScenarioScoped; import java.util.Optional; @ScenarioScoped public class StepDefinitions { @And("^Some ?(not)? step?$") public void someStep(Optional<String> example) { // Step code } }
说明:这种方式下,所有需要将String转为Optional<String>的步骤参数都会自动应用该转换逻辑。
另外,原代码中的@ScenarioScoped注解在Cucumber 7的Guice集成中依然有效,无需修改。
内容的提问来源于stack exchange,提问作者João Manoel Pampanini Filho
相关产品推荐
相关产品推荐

