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



我有以下三个类:

class City {
String name;
String code;
}
class Address {
String street;
City city;
}
class Person {
String name;
int age;
Address address;
}

现在,我有了一个REST API来为一个人POST。

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  | 

知道吗,Cucumber如何将步骤数据映射到子成员变量上(在本例中为Address和City(?

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

表在黄瓜中有点"奇怪"的数据类型,例如,与其他+自定义数据类型相比,这些数据类型存在于黄瓜表达式中

最新更新