自定义黄瓜参数定义以传递字符串列表



我定义了自定义参数类型,但我定义的正则表达式也匹配单个字符串(不仅仅是字符串列表)。我需要一个正则表达式,它将匹配字符串列表中的字符串,但如果它是单独的字符串,则不会匹配字符串(如果只有 1 个字符串,我没有字符串列表)

@ParameterType("(?:[^,]*)(?:,\s?[^,]*)*")
public List<String> listOfString(String listString) { 
List<String> finalList = new ArrayList<String>();
String[] stringArray = listString.split(", ");
for (String string : stringArray) {
finalList.add(string);
}
return finalList;
}

对正则表达式或替代解决方案的任何帮助都会很棒

例如如果我的步骤如下:

  1. 鉴于我有以下"字符串">
  2. 鉴于我有以下"字符串1"字符串2">

那么我的步骤定义应该是

@Given("I have the following {string}")
public void myFunction(String string) {}
@Given("I have the following {listOfString}")
public void myFunction(List<String> listOfString) {}

黄瓜不应该抛出matches more than one step definition例外。如果一个步骤有一个字符串参数,那么它应该执行第一个步骤定义(带有myFunction(String string)),如果步骤有一个字符串列表,那么它应该执行第二个步骤定义(使用myFunction(List<String> listOfString))。

如果您不想匹配空字符串,并且分隔符是逗号,应该至少存在一次:

[^,]+(?:,[^,]+)+

正则表达式演示

如果您不希望部分匹配(如尾随逗号),则可以附加锚点:

^[^,]+(?:,[^,]+)+$

最新更新