从DataTable中提取列

时间:2014-11-03 16:02:01

标签: java cucumber integration-testing

我的情况如下:

  Scenario: do something interesting
    Given the following users
      | first_name | last_name | address |
      | John       | Doe       | add1    |
      | Jane       | Doe       | add2    |

如何从 first_name 列中提取元素列表,例如:

我尝试使用 cucumber.api.DataTable ,但看起来它用于其他用途。

我只能提取行,然后根据需要进行管理。

3 个答案:

答案 0 :(得分:3)

我认为最可读的选项是asMaps方法,这样你就可以独立于列的排序:

@Given("^the following users$")
public void the_following_users(DataTable table) {
    for (Map<String, String> row : table.asMaps(String.class, String.class)) {
        System.out.println(row.get("first_name"));
    }
}

提取DataTable的单个列不是其api的一部分,因此您必须自己在java中实现它。

答案 1 :(得分:0)

我猜你只想要一个List,但由于你正在使用原始的jdbc调用,你仍然需要遍历ResultSet。您需要将查询设计为仅返回一列,然后将每个单项行提取到结果列表对象中。

现在如果您使用的是JPA,您可以通过制作查询来将结果提取到List中,只返回一列,JPA会自动将其解包到List(或其他类型的List中,如Date或Integer)。 / p>

答案 2 :(得分:0)

请尝试使用此代码,它将为您提供“first_name”列下的值。如果您有多行,则在循环中使用此代码

`@Given("^the following users$")
public void the_following_users(DataTable records) 
{
    for (Map<String, String> row : records.asMaps(String.class, String.class)) 
    { 
        System.out.println(row.get("first_name").intern());
    }
}`