在使用Cucumber进行BDD的过程中,很多时候,测试的同事准备的测试数据都是字符串类型的或者是Cucumber表格类型,这个时候,我们需要将字符串类型的测试数据,进行一系列的转换,例如List,实体类等,下面就来谈谈Cucumber给我们提供了哪些方便的类型转换
示例1:String类型转List<String>
Feature文件:
功能:演示Cucumber中如何通过字符串数组来实现list
场景:给定一个字符串,Cucumber会自动将这个字符串转换成list集合
假如:给定了如下的动物:"老虎,大象,草泥马,狮子"
Step_definition:
@假如("^:给定了如下的动物:\"([^\"]*)\"$")
public void 给定了如下的动物(@Delimiter(",") List<String> arg1) throws Throwable {
if(null != arg1 && !arg1.isEmpty()){
System.out.println("list长度为:"+arg1.size());
for(String str:arg1){
System.out.println(str);
}
}
}
使用方法:使用@Delimiter来标注字符串的分隔符,示例中使用的是”,”
示例2:datatable转List<String>
Feature:文件
功能:演示Cucumber中如何通过数据表格来实现list
场景:给定一个数据表格,Cucumber会自动将这个表格转换成list集合
假如:给定了如下的动物:
|老虎|大象|草泥马|狮子|
Step_definition:
@假如("^:给定了如下的动物:$")
public void 给定了如下的动物(DataTable animals) throws Throwable {
List<String> animalsList = animals.asList(String.class);
if(null != animalsList && !animalsList.isEmpty()){
System.out.println("list长度为:"+animalsList.size());
for(String str:animalsList){
System.out.println("DataTable:"+str);
}
}
}
使用方法:
Cucumber会将表格对应的转换成DataTable类,该类提供了操作表格的所有方法,以及转换方法
示例3:日期格式的字符串转换成Date或Calendar
Feature:文件
功能:cucumber中日期格式转换示例
场景:日期格式转换
假如:给定的日期为"2016-08-08T06:54:12"
Step_definition:
注:转换成Date类型
@假如("^:给定的日期为\"([^\"]*)\"$")
public void 给定的日期为(@Format("yyyy-MM-dd'T'HH:mm:ss") Date date) throws Throwable {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(date));
}
注:转换成Calendar类型
@假如("^:给定的日期为\"([^\"]*)\"$")
public void 给定的日期为(@Format("yyyy-MM-dd'T'HH:mm:ss") Calendar cal) throws Throwable {
cal.add(Calendar.YEAR, 1);
System.out.println(cal.get(Calendar.YEAR));
}
使用方法:
使用@Format注解,然后配合传入的日期字符串格式,实现对日期的转换
示例4:字符串转对象
Feature文件:Money类是有元和分构成
功能:模拟在ATM机取钱
场景:正确的场景,使用银行卡从ATM机取钱
假如:我的账户中有$"100.00"
Step_definition:
@假如("^:我的账户中有\\$\"([^\"]*)\"$")
public void 我的账户中有$(@Transform(MoneyConverter.class) Money amount) throws Throwable {
System.out.println("dollars:"+amount.getDollars());
System.out.println("cents:"+amount.getCents());
}
使用方法:使用@Transform注解,该注解的值为继承了Transformer<Money>的类,实现代码如下:
public class MoneyConverter extends Transformer<Money> {
@Override
public Money transform(String amount) {
String[] numbers = amount.split("\\.");
int dollars = Integer.parseInt(numbers[0]);
int cents = Integer.parseInt(numbers[1]);
return new Money(dollars, cents);
}
}
示例5:字符串转对象
Feature文件:
功能:演示transpose转换成实体类的功能
场景:
假如:给定的user信息如下
| firstname |Roberto |liu |
| nationality|Italian |china |
| lastname |Lo Giacco|chuanhong|
Step_definition:
@假如("^:给定的user信息如下$")
public void 给定的user信息如下(@Transpose List<User> user) throws Throwable {
for(User u:user){
System.out.println(u.toString());
}
}
使用方法:将类对象的各个字段的值对应到datatable中,然后使用@Transpose注解,可以实现datatable转对象的功能