将空字符串传递给 Cucumber DataTable

Pass empty string to cucumber DataTable

我正在将我的黄瓜版本从旧的 info.cukes 更新到最新的 io.cucumber (v6.8.1),我的一些测试由于变压器行为的变化而失败。 过去可以传递空字符串,但现在它们被转换为 null。如何将空字符串传递给 DataTable 参数?

  Scenario: Testing datatable with empty string
    When Passing empty string as second parameter
      | first  | second |
      | simple |        |
@When("Passing empty string as second parameter")
    public void test_definition(DataTable dataTable) {
        List<Map<String, String>> maps = dataTable.asMaps(String.class, String.class);
        System.out.println(maps);
// this results in [{first=simple, second=null}]
// is there a way to pass empty string and achieve [{first=simple, second=}]?
    }

自 v5.0.0 以来,数据 table 中的空单元格变成空值而不是空字符串。通过在数据 table 类型上使用 replaceWithEmptyString = "[blank]",可以显式插入空字符串。

这会启用以下功能:

Feature: Whitespace
  Scenario: Whitespace in a table
   Given a blank value
     | key | value   |
     | a   | [blank] |

@given("A blank value")
public void givenABlankValue(Map<String, String> map){
    // map contains { "key":"a", "value": ""}
}

@DataTableType(replaceWithEmptyString = "[blank]")
public String stringType(String cell) {
    return cell;
}

请注意,您不需要使用

List<Map<String, String>> maps = dataTable.asMaps(String.class, String.class);

您可以使用:

public void test_definition(List<Map<String, String>> maps) {

另请参阅:https://github.com/cucumber/cucumber-jvm/blob/main/release-notes/v5.1.0-v5.7.0.md#v520-redefine-build-in-data-table-types

我也面临着类似的问题,并且有太多的场景无法在多个地方进行这些更改。所以我选择了以下更改以使其像以前一样工作:

@DataTableType
  public String nullToString(String cell) {
    return Objects.isNull(cell) ? StringUtils.EMPTY : cell;
  }