开发者社区> 异步社区> 正文

《验收测试驱动开发:ATDD实例详解》—第2章2.3节表格化测试

简介:
+关注继续查看

本节书摘来自异步社区《验收测试驱动开发:ATDD实例详解》一书中的第2章2.3节表格化测试,作者【德】Markus Gärtner,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 表格化测试
验收测试驱动开发:ATDD实例详解
现在,随着第一个实例的自动化,Tony可以简单地重用第一个测试的步骤对剩下的经讨论会确定的实例进行自动化。作为第一步,他需要将Valet.feature里的场景转换为一个表格化的实例场景框架。为了完成这个目标,他把30分钟的时长用一个占位符< parking duration >代替,并且把期望的价格用占位符< parking costs >代替,并把这个场景标记为场景框架。Tony把实际数值放在场景框架下记录所有实例数据的表格里。Tony用占位符的名字作为表格项的名称。结果见程序清单2-23。

程序清单2-23 第一个测试转换为表格形式

1 Feature: Valet Parking feature
 2  The parking lot calculator can calculate costs for Valet
    Parking.
 3
 4  Scenario Outline: Calculate Valet Parking Cost
 5   When I park my car in the Valet Parking Lot for <parking
    duration>
 6   Then I will have to pay <parking costs>
 7
 8  Examples:
 9  | parking duration | parking costs |
10  | 30 minutes    | $ 12.00    |

现在,Tony可以开始将讨论会上确定的实例逐一输入表格中了。Tony首先运行了测试,确保他仍能正常工作。他得到的输出如程序清单2-24所示。

程序清单2-24 第一个测试改为表格形式后的命令行输出

1 Feature: Valet Parking feature
 2  The parking lot calculator can calculate costs for Valet
    Parking.
 3
 4  Scenario Outline: Calculate Valet Parking Cost
        # Valet.feature:4
 5   When I park my car in the Valet Parking Lot for <parking
    duration> # step_definitions/Valet_steps.rb:1
 6   Then I will have to pay <parking costs>
         # step_definitions/Valet_steps.rb:6
 7
 8   Examples:
 9    | parking duration | parking costs |
10    | 30 minutes    | $ 12.00    |
11
12 1 scenario (1 passed)
13 2 steps (2 passed)
14 0m0.316s

现在他开始填入剩下的实例。最后Tony把讨论会上所有的实例都做成了表格化的测试(见程序清单2-25)。

程序清单2-25 讨论会中所有的实例都被填入表格

1 Feature: Valet Parking feature
 2  The parking lot calculator can calculate costs for Valet
    Parking.
 3
 4  Scenario Outline: Calculate Valet Parking Cost
 5   When I park my car in the Valet Parking Lot for <parking
   duration>
 6   Then I will have to pay <parking costs>
 7
 8  Examples:
 9  | parking duration | parking costs |
10  | 30 minutes    | $ 12.00   |
11  | 3 hours     | $ 12.00   |
12  | 5 hours     | $ 12.00   |
13  | 5 hours 1 minute | $ 18.00   |
14  | 12 hours     | $ 18.00   |
15  | 24 hours     | $ 18.00   |
16  | 1 day 1 minute  | $ 36.00   |
17  | 3 days      | $ 54.00   |
18  | 1 week      | $ 126.00   |

为了执行这些测试,他需要用合适的值扩展ParkCalcPage类中的durationMap(见程序清单2-26)。

程序清单2-26 为全部代客泊车测试扩展了durationMap后的ParkCalcPage类

1 class ParkCalcPage
2
3 ...
4
5  @@durationMap = {
6   '30 minutes' => ['05/04/2010', '12:00', 'AM', '05/04/2010'
      ,'12:30', 'AM'],
7   '3 hours' => ['05/04/2010', '12:00', 'AM', '05/04/2010',
      '03:00', 'AM'],
8   '5 hours' => ['05/04/2010', '12:00', 'AM', '05/04/2010',
      '05:00', 'AM'],
9   '5 hours 1 minute' => ['05/04/2010', '12:00', 'AM',
      '05/04/2010', '05:01', 'AM'],
10   '12 hours' => ['05/04/2010', '12:00', 'AM', '05/04/2010',
      '12:00', 'PM'],
11   '24 hours' => ['05/04/2010', '12:00', 'AM', '05/05/2010',
      '12:00', 'AM'],
12   '1 day 1 minute' => ['05/04/2010', '12:00', 'AM',
      '05/05/2010', '12:01', 'AM'],
13   '3 days' => ['05/04/2010', '12:00', 'AM', '05/07/2010',
      '12:00', 'AM'],
14   '1 week' => ['05/04/2010', '12:00', 'AM', '05/11/2010',
      '12:00', 'AM']
15  }
16
17 ...

Tony执行了所有的测试并看到它们全部通过了。似乎Alex已经实现了代客泊车的所有功能。故事卡背面的验收条件为Alex提供了实现功能所需的信息。作为最后一步,Tony将他修改过的所有文件提交到源代码库中,并且在团队的任务看板上将代客泊车的故事卡标记为已自动化且通过测试。这天下班前,Alex和Tony击掌庆祝了他们的成功。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
HSF/Dubbo序列化时的LocalDateTime, Instant的性能问题
### 来源 在对Dubbo新版本做性能压测时,无意中发现对用例中某个TO(Transfer Object)类的一属性字段稍作修改,由Date变成LocalDateTime,结果是吞吐量由近5w变成了2w,RT由9ms升指90ms。
2512 0
独家揭秘:阿里小程序的一云多端!看这篇就够了!
阿里巴巴小程序一云多端的整体战略,以及阿里小程序后续为开发者提供的云服务(云应用、云开发等)、开发者工具链(IDE、插件、SDK等)、跨端框架能力说明。同时结合繁星计划后续提供给开发者的扶持和ISV的权益体系做一个整体的介绍。
27541 0
GDB 调试 Mysql 实战(一)源码编译安装
下载源码 git clone https://github.com/mysql/mysql-server.git cd mysql-server git checkout 5.7 编译安装 安装依赖 yum install -y cmake make gcc gcc-c++ ncurses-dev...
1049 0
PostgreSQL 锁
锁的类型 /* NoLock is not a lock mode, but a flag value meaning "don't get a lock" */ #define NoLock 0 #define AccessS...
1215 0
mac vagrant 创建 lnmp 开发环境
建议使用迅雷下载,浏览器下载可能太慢。123实操笔记mac homebrew 安装 vagrant$ brew cask install vagrantCloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask'.
636 0
CDN的HTTPS配置及故障排除
相较于HTTP协议来说,HTTPS协议在网络链路中传输更具有安全可靠性,因为它通过SSL证书在链路中间对我们七层的网络包做了加密,进而防止了一些恶意的内容劫持。针对于这种场景,阿里云CDN也提供了相关的功能,可以支持客户端到CDN L1节点的HTTPS的协议。
1613 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载