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

标签 java enums cucumber cucumber-jvm

this question 为基础,提供的示例似乎将功能文件中的文本锁定得过多,不符合 Java 编程风格(请注意,文本全部大写,并且只有一个单词。

当功能文件具有更多“人类可读”文本时是否可以传递枚举?例如:

简单示例

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 的示例,因为简单地使用 @XStreamConverter(HolidayTransformer.class) 标记枚举对于转换器在 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)
}

关于java - 是否可以将 Java-Enum 作为参数从 Cucumber 功能文件传递(以更文本友好的方式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49898427/

相关文章:

java - Legacy Indexing/Au​​to Indexing 与 Neo4j 中的新索引方法之间的区别

java - 如何使用 Java 在 ImageJ2 中将图像从 8 位转换为 RGB

ruby-on-rails - 如何使用Yard记录Rails枚举类型

java - Serenity BDD 有趣的功能(按组分类)

Java 11 : Predicate or/and on Optional

java - 选择具有预期数量的唯一值和插入的 HashSet 的初始容量

ios - 为测试创建 Alamofire 响应

java - Enum.values() 与 EnumSet.allOf()。哪一个更可取?

ruby-on-rails - Cucumber Rails 3.1 未初始化的常量 ActionController::Dispatcher (NameError)

ruby-on-rails - 如何让故事与 Restful 身份验证和 cucumber 一起工作?