如何在黄瓜中将小黄瓜步骤定义数据映射到Java对象?

时间:2018-08-04 22:18:50

标签: java cucumber bdd cucumber-java cucumber-junit

我有以下三个课程:

class City {
 String name;
 String code;
}

class Address {
 String street;
 City city;
}

class Person {
 String name;
 int age;
 Address address;
}

现在,我有一个REST API可以发布一个人。

POST /person

{
 "name":"John",
 "age":21,
 "address":{
  "street":"First st.",
  "city":{
   "name":"London"
  }
 }
}

为了测试此API,我使用Cucumber创建了一个方案,并在其中创建了以下步骤定义:

Then a person is created using REST api "/person"
| name | age | address.street | address.city.name |
| John | 21  | First st.      | London            |

在我的Java类中,创建了以下方法将此步骤映射到它:

public void create_a_person(Person person){
 System.out.println("Person - " + person);
}

此代码无法使用步骤中提供的数据创建人员对象。它引发以下异常:

cucumber.runtime.CucumberException: Not a Map or List type: class Person

但是,如果给出如下数据,则可以轻松创建Person对象:

Then a person is created using REST api "/person"
| name | age |
| John | 21  | 

任何想法,黄瓜如何将步骤数据映射到子成员变量(在这种情况下,如地址和城市)?

1 个答案:

答案 0 :(得分:0)

我想您会在这里找到答案:https://github.com/cucumber/cucumber/tree/master/datatable#custom-table-types。 您需要实现一个TableTransformer。

表在黄瓜中有点``奇数''数据类型,例如与other +custom data types, that live in cucumber expressions

相比