How to convert a DataTable in Cucumber to a List of objects?(如何将 Cucumber 中的 DataTable 转换为对象列表?)
问题描述
Original Title: What does scalar mean in Cucumber DataTables in Java?
From this reference:
Java provides several scalar types. These include primitive numeric types, plus boolean and char.
Every scalar (primitive) type has an associated wrapper class or reference type.
Reading the javadocs:
/**
* Converts the table to a List.
*
* If {@code itemType} is a scalar type the table is flattened.
*
* Otherwise, the top row is used to name the fields/properties and the remaining
* rows are turned into list items.
*
* @param itemType the type of the list items
* @param <T> the type of the list items
* @return a List of objects
*/
public <T> List<T> asList(Class<T> itemType) {
return tableConverter.toList(this, itemType);
}
/**
* Converts the table to a List of List of scalar.
*
* @param itemType the type of the list items
* @param <T> the type of the list items
* @return a List of List of objects
*/
public <T> List<List<T>>> asLists(Class<T> itemType) {
return tableConverter.toLists(this, itemType);
}
However, I was able to pass String.class in asList():
List<String> list = dataTable.asList(String.class);
A String is not a primitive in Java. I would like some clarification on what "scalar" means in this context.
I did not find an explicit definition about what Cucumber for Java means with scalar type
.
The best hint I could find was in the snippet that is produced for new steps that accept a DataTable
. The generated comment reads:
For automatic transformation, change DataTable to one of List<YourType>, List<List<E>>, List<Map<K,V>> or Map<K,V>. E,K,V must be a scalar (String, Integer, Date, enum etc)
So it seems that besides the "Java scalar types" (byte
, short
, int
, long
, char
, boolean
, or respectively their wrapper types Byte
, Short
, Integer
, Long
, Char
and Boolean
) you can also use String
, java.util.Date
and enum types.
Actually, a short test showed that I can use any type that has a constructor with a single String
as parameter.
A small example with my own value class (very contrived). The output from the following snippets is a List<List<MyValueClass>>
.
// MyValueClass.java
public class MyValueClass {
private final String value;
public MyValueClass(String v) {
this.value = v;
}
public String getValue() {
return value;
}
}
// snippet from MySteps.java
@Given("^a table with$")
public void a_table_with(DataTable arg1) throws Throwable {
System.out.println(arg1.asLists(MyValueClass.class));
}
// snippet from my test1.feature
Scenario: Test with Datatable
Given a table with
| a | b | c |
| 1 | 2 | 3 |
| a | b | c |
这篇关于如何将 Cucumber 中的 DataTable 转换为对象列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何将 Cucumber 中的 DataTable 转换为对象列表?
基础教程推荐
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01