Cucumber中涉及到的类型转换

    xiaoxiao2025-09-04  469

    在使用Cucumber进行BDD的过程中,很多时候,测试的同事准备的测试数据都是字符串类型的或者是Cucumber表格类型,这个时候,我们需要将字符串类型的测试数据,进行一系列的转换,例如List,实体类等,下面就来谈谈Cucumber给我们提供了哪些方便的类型转换

    示例1String类型转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来标注字符串的分隔符,示例中使用的是”,”

    示例2datatableList<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:日期格式的字符串转换成DateCalendar

    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.classMoney 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转对象的功能

    转载请注明原文地址: https://ju.6miu.com/read-1302305.html
    最新回复(0)