是否可以将 Java-Enum 作为 Cucumber 特征文件的参数传递(以更文本友好的方式)?

Is it possible to pass Java-Enum as argument from cucumber feature file (in a more text friendly way)?

的基础上,所提供的示例似乎将功能文件中的文本过多地锁定为 Java 编程风格(请注意,文本全部为大写,并且仅一个字。

当特征文件有更多"human readable" 文本时是否可以传递枚举?例如:

简单示例

Feature: Setup Enum and Print value
  In order to manage my Enum
  As a System Admin
  I want to get the Enum

  Scenario Outline: Verify Enum Print
  When I supply a more human readable text to be converted to <Enum>

  Examples: Text can have multiple formats
  |Enum         |
  |Christmas    |
  |New Year Eve |
  |independence-day|

我估计枚举可能是这样的:

public enum Holiday {

CHRISTMAS("Christmas"),NEW_YEAR("New Year"),INDEPENDENCE_DAY("independence-day");

private String extendedName;

private Holidays(String extendedName) {
    this.extendedName = extendedName;
}

}

我们如何将两者相互转换?

更复杂的例子

在更复杂的示例中,我们会将其传递给 ScenarioObject

Scenario: Enum within a Scenario Object
      When I supply a more human readable text to be converted in the objects: 
      |Holiday         |Character|
      |Christmas    |Santa  |
      |New Year Eve |Harry|
      |independence-day|John Adams|

public class ScenarioObject{
private String character;
private Holiday holiday;
(...getters and setters)
}

更新: 如果唯一的解决方案是应用 Transformeras described here,那么将不胜感激如何将其应用于 ScenarioObject 的示例,因为只需使用 [=16] 标记枚举=] 不足以使变压器在 ScenarioObject.

范围内工作

到目前为止,我找到的最佳解决方案是使用变压器。 对于 ScenarioObject 的复杂示例,这涉及:

用转换器标记枚举

@XStreamConverter(HolidayTransformer.class)
public enum Holiday {

CHRISTMAS("Christmas"),NEW_YEAR("New Year"),INDEPENDENCE_DAY("independence-day");

private String extendedName;

private Holidays(String extendedName) {
this.extendedName = extendedName;
}

public static Holiday fromString(String type) throws Exception {...}
}

创建转换器

public class HolidayTransformer  extends Transformer<Holiday> {

@Override
public Holiday transform(String value) {
    try {
        return Holiday.fromString(value);
    } catch (Exception e) {
        fail("Could not convert from value");
        return null;
    }
}

}

也用转换器标记 ScenarioObject

public class ScenarioObject{
private String character;
@XStreamConverter(HolidayTransformer.class)
private Holiday holiday;
(...getters and setters)
}