在使用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转对象的功能

Cucumber中涉及到的类型转换相关推荐

  1. 深入理解C++中五种强制类型转换的使用场景

    深入理解C++中五种强制类型转换的使用场景 1.C风格的强制类型转换 2.C++风格的强制类型转换 2.1.static_cast 2.1.1.用于基本内置数据类型之间的转换 2.1.2.用于指针之间 ...

  2. python类型转换-Python中如何进行数据类型转换?

    原标题:Python中如何进行数据类型转换? 这一次要讲的是Python中的数据类型转换,Python中的数据类型转换是什么?就是将数据由当前类型变化为其他类型的操作就是数据类型转换.数据类型转换分为 ...

  3. MPLS转发过程中涉及的相关概念—Vecloud微云

    MPLS术语 • 标签(Label):是一个短而定长的.只具有本地意义的标识符,用于唯一标识一个分组所属的FEC.在某些情况下,例如要进行负载分担,对应一个FEC可能会有多个入标签,但是一台设备上,一 ...

  4. Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略

    Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略 目录 pandas中常见的数据类型转换方法 T1.读取时直接转换数据类型 T2.采用astype

  5. python的所有数据类型都可以相互转化吗_Python中如何进行数据类型转换?

    原标题:Python中如何进行数据类型转换? 这一次要讲的是Python中的数据类型转换,Python中的数据类型转换是什么?就是将数据由当前类型变化为其他类型的操作就是数据类型转换.数据类型转换分为 ...

  6. C/C++中涉及存储方式的关键字:auto,static,register,extern2009-01-22 11:23auto关键字:

    C/C++中涉及存储方式的关键字:auto,static,register,extern 2009-01-22 11:23 auto关键字: auto对象和变量被存储在栈中,它的生命周期仅存在于它的声 ...

  7. C++中4种强制类型转换 ?

    C++中4种强制类型转换 前言 C风格的转换格式很简单,但是有不少缺点 C++中的类型转换: 一.static_cast转换 二.dynamic_cast转换 三.const_cast转换 四.rei ...

  8. WPF中的一些常用类型转换

    WPF中的一些常用类型转换 原文:WPF中的一些常用类型转换 1.string和Color的转换: //string转Color (Color)ColorConverter.ConvertFromSt ...

  9. cucumber测试_如何在Cucumber中进行后端测试

    cucumber测试 Cucumber是一种规范语言的执行框架. 它并不是要成为测试语言,而是用于创建测试自动化. Cucumber最适合出现一些实际参与者互动并取得某种成果的情况. 当可以从用户的角 ...

最新文章

  1. java内连接外连接_SQL中的内连接与外连接--Java学习网
  2. Jupyter Notebook 使用流程
  3. centos6.3下yum安装redis
  4. C语言:一个数组中只有两个数字是出现一次
  5. command pattern
  6. 有关identity的小技巧
  7. cython安装ubuntu_ubuntu上的Cython独立可执行文件
  8. FFmpeg在Intel GPU上的硬件加速与优化
  9. asp.net上传文件时提示,不支持给定路径的格式解决方法
  10. redhat9.0配置apache 出现乱码
  11. 10-C++远征之模板篇-学习笔记
  12. python调用webservice接口实例_python调用各种接口,webservice,c接口,com接口,socket协议方法...
  13. shell unexpected operator
  14. Protocol Buffer 基础(Python 版)
  15. SD卡数据读取(fat文件模式)
  16. 讨论:男孩为何要找比自己小的女孩?
  17. 基于三相VSR的SVPWM调制
  18. 5.1.2全景声音箱摆位_客厅影院选择7.1还是5.1.2全景声合适,天空音箱点位怎么定...
  19. 一个50岁大叔学编程的真实故事——任何时候学习都不晚
  20. 吉利车机安装第三方软件教程,手机修改dns完整操作教程

热门文章

  1. 好用的实时渲染器不止lumion,上呆猫云工作站,跨过显卡门槛get更多制作搭配……
  2. 使用opencv查找两张图片不同的部分
  3. Creo 二次开发-自动标注球标
  4. 基于OPCAutomation的OPC DA Client 工具
  5. Progressive Minimal Path Method for Segmentation of 2D and 3D Line Structures论文学习
  6. 使用Python制作证件照
  7. 拍卖小程序直播功能扩展之翻转摄像头、美颜
  8. 转移到ios下载安卓_转移到iOS app-转移到iOS(从Android转到iOS)苹果官方版_5577安卓网...
  9. Day14【元宇宙的实践构想03】—— 元宇宙的资产观(NFT、数字资产、虚拟地产、与现实世界资产关系)
  10. sqli-labs全通关payload