我想要什么
我正在使用 Cucumber 中的数据表。
我有以下情况:
特征文件中的步骤:
I set the ingredients necessary for a meal
| name | ingredients |
| mac and cheese | pasta,cheese |
| hamburger | bread,meat,lettuce |
在我的 StepDefinition 文件中
@When("I set the ingredients necessary for a meal")
public void setIngredients(List<Meal> meals){
//do things with it
}
我有类(class)餐
public class Meal {
String name;
List<String> ingredients;
}
这行不通。
我所知道的
如果我将我的配料字段设置为一个简单的字符串 cucumber ,“神奇地”将名称和配料与类的字段匹配,并且在步骤定义中我将得到一个正确填写的膳食列表。 但目前它不会自动匹配。
我尝试过的
我尝试将类定义为:
public class Meal {
String name;
String ingredients;
List<String> ingredientsList;
}
还有一个构造函数 Meal(String, String) 可以将配料解析到配料列表中,但它不起作用。
我尝试为成分定义一个 setter 来解析它并定义 ingredientsList,但它也不起作用。
我尝试在步骤定义中使用数据表,但我仍然找不到将其转换为我的成分列表的方法。
我尝试使用 Transformer,但是,据我所知,我必须为我想要提供的每顿饭定义一个步骤,并且我必须在步骤本身内发送值。
我不想要的
我不想被迫在 Meal 类以外的任何地方解析信息。
我是怎么临时解决的
在更完整的 Meal 定义中,定义了一个 setIngredientsList() 将成分解析为列表。
在步骤定义中,我遍历了餐食列表并为每餐调用了 setIngredientsList。正如我所说,我不希望在 Meal 类之外完成任何此类处理。
问题
有人知道我该怎么做吗?
最佳答案
我会考虑使用 Map<String, String>
而不是列表。查看您的示例对我来说就像名称值对。 map 可能很合适。
当您的字段在 Meal
中被封装为私有(private)时您可能不需要构造函数。但是,我会将它们隐藏为私有(private)变量并添加一个双参数构造函数。尽可能少暴露的习惯有助于长期维护。
我写了一个blog post不久前可能会对您有所帮助。
关于datatable - 在 Java 中的 Cucumber 步骤中为字段定义 Datatable 单元格中的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48348027/