我正在使用黄瓜数据表。我想将此数据表转换为Map而不是列表。因此,基本上,如果我将“标题行”用作键并将数据行用作键的值,该怎么办。我应该怎么做?
让我分享一个例子来更清楚。
鉴于以下动物:
| Type | BabyAnimal |
| cow | Calf |
| horse | Pony |
| sheep | Lamb |
Run Code Online (Sandbox Code Playgroud)
与其创建一个List<List<String>>here,不如创建一个List<Map<String,String>>here。地图的键应包含“类型”和“ BabyAnimal”,值应包含相应的值。因此,地图实体为:
<Type,cow>,<BabyAnimal,Calf>
<Type,horse>,<BabyAnimal,Pony>
<Type,sheep>,<BabyAnimal,Lamb>
Run Code Online (Sandbox Code Playgroud)
我们将如何做?我觉得这是一种更好的方法,因为我们正在从密钥中获取数据。例如List(1).Map.get(Type)
,在List的情况下,我们必须执行get(0),get(1),并且有使用不正确数据的机会。
并添加第二个答案,因为问题中的通用类型被 html 咀嚼了。
给定以下动物:
| Type | BabyAnimal |
| cow | Calf |
| horse | Pony |
| sheep | Lamb |
Run Code Online (Sandbox Code Playgroud)
假设您希望这是您的步骤定义:
@Given("all baby animal details")
public void allMapDetails(List<Map<String, String>> animals) {
System.out.println(animals);
}
Run Code Online (Sandbox Code Playgroud)
然后该表将自动转换为字符串到字符串的映射列表。
您可以在 GitHub 上的 cucumber-jvm 项目中找到以下 DataTable 提示:
\n\n " // For automatic transformation, change DataTable to one of\\n" +\n " // E, List<E>, List<List<E>>, List<Map<K,V>>, Map<K,V> or\\n" +\n " // Map<K, List<V>>. E,K,V must be a String, Integer, Float,\\n" +\n " // Double, Byte, Short, Long, BigInteger or BigDecimal.\\n" +\n " //\\n" +\n " // For other transformations you can register a DataTableType.\\n";\nRun Code Online (Sandbox Code Playgroud)\n\n您可以在Cucumber 文档中找到如何操作:
\n\n将列表传递给步骤定义的最简单方法是使用数据表:
\n\nGiven the following animals:\n | cow |\n | horse |\n | sheep |\nRun Code Online (Sandbox Code Playgroud)\n\n将参数声明为 List,但不要在表达式中定义任何捕获组:
\n\n@Given("the following animals:")\npublic void the_following_animals(List<String> animals) {\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在您的情况下,替换List为Map.
| 归档时间: |
|
| 查看次数: |
5460 次 |
| 最近记录: |