【问题标题】:Jbehave ExamplesTable array/list as parameterJbehave ExamplesTable 数组/列表作为参数
【发布时间】:2018-08-08 09:47:32
【问题描述】:

我们有这样的故事文件(比如说)

Given Something
Scenario Some scenario
When I do something blah blah
Then I get a bunch of stuff and the following data:
{transformer=FROM_LANDSCAPE}
|aField|aVal1|aVal2|aVal3|
|bField|bVal1|bVal2|bVal3|
|cField|cVal1|cVal2|cVal3|

然后在我们的步骤类中:

@Then("I get a bunch of stuff and the following data:$myData")
public void verifyData(ExamplesTable myData) {

    List<SomeDataClass> myDataList = myData.getRowsAs(SomeDataClass.class);

    // do something

}

SomeDataClass 通常看起来像:

public class SomeDataClass {

    private int aField;
    private String bField;
    private String cField;

    // getters/setters ...

}

但我的情况是这样的数据类:

public class NewDataClass {
    private int aField;
    private String bField;
    private Set<SomeObj> cField;

    //...

}

在这种情况下,我有一个集合(集合)作为一个字段。我如何使用表格在上面的故事语法中表示这一点?也许有更好的方法?

【问题讨论】:

  • 您是要迭代处理一行数据,还是一次处理整组数据?如果是前者,那是 Examples: 的标准行为,但您的语法需要更改。
  • 我认为这并不重要,只要我可以访问 steps 类中的所有数据

标签: java bdd jbehave


【解决方案1】:

JBehave 支持mapping parameters to custom types。 提供的示例将具有以下语法。

故事文件:

Given Something
Scenario Some scenario
When I do something blah blah
Then I get a bunch of stuff and the following data:
{transformer=FROM_LANDSCAPE}
|aField|aVal1|aVal2|aVal3|
|bField|bVal1|bVal2|bVal3|
|cField|cVal1|cVal2|cVal3|

步骤实现:

@Then("I get a bunch of stuff and the following data:$myData")
public void verifyData(List<NewDataClass> myData) {
    // step logic
    // ...
}

新数据类:

import org.jbehave.core.annotations.AsParameters;

@AsParameters
public class NewDataClass {
    private int aField;
    private String bField;
    private Set<SomeObj> cField;

    // getters & setters
    // ...
}

【讨论】:

  • 我认为你的回答更直接地解决了发帖者的问题,所以我投了赞成票。
【解决方案2】:

示例故事文件 sn-p:

Given I am on the add a new user page
When I enter <firstName> <lastName> <address> <city> <state> and <zip>
And I click the Ok button
Then the new user is added

Examples:
firstName|lastName|address        |city    |state|zip
Bill     |Hileman |123 Main Street|Yourtown|FL   |12345
Art      |VanDelay|321 Elm Drive  |MyTown  |PA   |54321

步骤文件代码:

@When("I enter <firstName> <lastName> <address> <city> <state> and <zip>")
public void whenIEnterdata(@Named("firstName") String firstName,
                           @Named("lastName") String lastname,
                           @Named("address") String address,
                           @Named("city") String city,
                           @Named("state") String state,
                           @Named("zip") String zip) {
    // your step code here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2022-01-02
    • 2021-03-30
    • 2015-01-05
    相关资源
    最近更新 更多