如何从Cucumber Scenario传递字符串列表

时间:2017-07-11 11:53:42

标签: cucumber cucumber-jvm scenarios

我需要从黄瓜场景中传递字符串列表,其工作正常如下

Scenario Outline: Verify some scenario 
Given something
When user do something 
Then user should have some "<data>" 
Examples: Some example
|data|
|Test1, Test2, Test3, Test4|

在步骤定义中,我使用List来检索变量的值。 但是当数据变量的值之一包含逗号(,)时,例如Tes,t4变得复杂,因为它将“Tes”和“t4”视为两个不同的值

 Examples: Some example
 |something|
 |Test1, Test2, Test3, Tes,t4|  

那么我可以使用任何转义字符,还是有任何其他方法来处理这种情况

5 个答案:

答案 0 :(得分:4)

找到了一种简单的方法。请参阅以下步骤。

  • 这是我的功能文件。

    feature file

  • 这是用于用代码映射要素步骤的相应代码。

    code for the corresponding feature

  • 哦,是的。结果很重要。您可以看到调试视图。

    result in the debug view

答案 1 :(得分:0)

尝试在列中设置示例,如下所示:

| data   |
| Test1  |
| Test2  |
| Test3  |
| Tes,t4 |

这将使场景运行4次,期待&#39;某些事情&#39;更改为下一个值。首先是Test1&#39;,然后是&#39; Test2&#39;等。

在步骤定义中,您可以使用这样的数据:

Then(/^user should have some "([^"]*)"$/) do |data|
  puts data
end

如果您想使用|Test1, Test2, Test3, Tes,t4|,请更改&#39;,&#39;到&#39;;&#39;例如:|Test1; Test2; Test3; Tes,t4|并在步骤定义中拆分数据:

data.split("; ")会产生["test1", "test2", "test3", "te,st"]

将数据转换为List(使用Java):

String test = "test1; test2; test3; tes,t4";
String[] myArray = test.split("; ");
List<String> myList = new ArrayList<>();
for (String str : myArray) {
    myList.add(str);
}
System.out.print(myList);

有关此here

的更多信息

答案 2 :(得分:0)

这应该适合你:

Scenario: Verify some scenario 
Given something
When user do something 
Then user should have following
| Test1 |
| Test2 |
| Test3 |
| Tes,t4| 

在步骤定义

Then("^user should have following$")
 public void user_should_have_following(List<String> testData) throws Throwable {
 #TODO user your test data as desired
 }

答案 3 :(得分:0)

不要将数据放在您的方案中。你从中获得的收益很少,而且会产生很多问题。而是为您的数据命名,并在您的方案的Then中使用该名称

e.g。

 Then the user should see something

在场景中放置数据和示例大多没有意义。以下适用

  1. 数据将是应该生成的内容的重复
  2. 日期容易出现拼写错误
  3. 当场景失败时,很难知道代码是错误的(它产生错误的数据)还是场景错误(你输入了错误的数据)
  4. 准确表达复杂数据真的很难
  5. 没有人真正仔细阅读您的方案以确保数据准确

答案 4 :(得分:0)

在TypeRegistryConfigurer的Transformer中,您可以执行此操作

@Override
public Object transform(String s, Type type) {
    if(StringUtils.isNotEmpty(s) && s.startsWith("[")){
        s = s.subSequence(1, s.length() - 1).toString();
        return Arrays.array(s.split(","));
    }
    return objectMapper.convertValue(s, objectMapper.constructType(type));
}