是否可以将 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)
}
更新:
如果唯一的解决方案是应用 Transformer
、as 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)
}
在
当特征文件有更多"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)
}
更新:
如果唯一的解决方案是应用 Transformer
、as 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)
}