《Cucumber:行为驱动开发指南》——6.5 我们学到了什么

本节书摘来自异步社区《Cucumber:行为驱动开发指南》一书中的第6章,第6.5节,作者:【英】Matt Wynne , 【挪】Aslak Hellesy著,更多章节内容可以访问云栖社区“异步社区”公众号查看

6.5 我们学到了什么

Cucumber特性对公司来说是一笔宝贵的财富。我们曾见过有团队将他们系统中大块大块的部分推倒重写,知道自己有一组准确的、可执行的规范来确保新的方案会运行得跟原来一样好,他们自不必担心什么。对这些团队来说,特性比产品代码本身更有价值。如果你打算在编写Cucumber特性上面做些投入,那就要照管好这些特性,让他们为整个团队带来尽可能多的益处,从而保护好这笔投入。不要迁就于缓慢的特性、间歇失败的特性或者团队中只有一部分人阅读的特性:问题一旦出现立该将其消除,让每个问题成为一个理由,基于这些理由把测试做得比以前更好。

Cucumber看上去似乎只是一种测试工具,但本质上它是一种协作工具。如果你真正努力去编写特性,使它们可作为文档提供给团队中的非技术利益相关人,你会发现自己不得不与利益相关人讨论一些原本你不会花时间讨论的细节。这些讨论揭示了他们对问题的深刻见解,这些见解将帮助你构建一套更好的方案。这才是Cucumber的真正奥秘:测试和文档都只是令人愉快的副作用而已,真正的价值在于交谈过程中对于知识的发掘。
尝试一下

下面是一些你可以自行尝试的练习。

在团队中实施缺陷预防

想出使团队生产线速度变慢的三件事情。每件事情的根源是什么?你可以做些什么来使它们向着好的方向变化?

关于偶然细节的练习

下面的场景是以丑陋的命令式风格编写的,穿插着各种偶然细节。

Scenario: Create an invoice
 Given I am a signed in user with role: admin
 And a client "Test Client" exists with name: "Test Client"
 And a project "Test Project" exists with:
  | name  | "Test Project"    |
  | client | client "Test Client" |
 And an issue "Test Issue" exists with:
  | project | project "Test Project" |
  | name   | "Test Issue"     |
 And a work_unit "Test Work Unit" exists with:
  | issue     | issue "Test Issue" |
  | completed_on | "2011-08-24"    |
  | hours     | "7.5"      |
 And I am on the admin invoices page
 Then I should see "Test Client"
 And I follow "Test Client"
 And I fill in "invoice_id" with "abc"
 And I press "Submit"
 Then I am on the admin invoices page
 And I should not see "Test Client"

首先弄清楚来龙去脉:你认为这个系统是做什么的?场景的用途是什么?它在测试怎样的行为?注意那些像蔓生杂草一般的偶然细节是如何妨碍你理清测试的实际目标的。

理解了场景的实质目标之后,基于自己的词汇把它重写一遍。需要的步骤应该可以少很多,但你可能会考虑使用多个场景。

用更加声明式的风格重写场景之后,你能找到原先场景中遗漏的一个关键的Then步骤吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作者: [英]Matt Wynne / [挪]Aslak Hellesy 出版社: 人民邮电出版社 原作名: The Cucumber Book:Behaviour-Driven Development for Testers and Developers 译者: 许晓斌 / 王江平 这是一本半技术书籍,虽然是测试使用,但阅读它实在也需要一定的代码基础,所以可见,测试的技术含量越来越高了:D 由于本人使用Java,所以忽略了12章以后的内容,由于它所使用到的那些框架都是基于Ruby。 本书分为3部分: 1. 基础 2. 进阶 3. 应用 在第一部分,基础篇中,介绍了Gherkin语法,Cucumber的产生背景与适用范围,以及常见问题与解答。 Cucumber是一种系统行为的描述文件,它是活文档,应该时刻描述当前系统的正确行为,并且能够自动测试。 这一特性事实上也要求在写Cu..ber文件时,务必做到用户精准,不要重复场景,用书上的话来讲,就是同一句话,对且只对应系统中的唯一的一个行为。 Cu..ber主要用于在团队中进行沟通,语言必须能通用,要通用就要求隐藏技术细节,以自然语言去描述系统的行为,最经典的场景如: Given ... When ... Then ... 给定一定场景,当做什么操作时,会产生什么样的结果。 表格的使用,Backgroud关键字都是为了让特性文件能更简洁,也更易懂和富有表现力。 第二部分进阶篇中,介绍了一些高级的功能,比如: 钩子和标签 钩子是指 @Before @After 这种加上实现方法之前,在测试开始时和结束后执行一些特定的操作。Cu...ber的步骤是全局的,同理,@Be..这类钩子也是全局的,Cu...ber的全局是大有深意的,因为它认为,特性中的所有有用步骤,只能对应一种系统的行为。若需要让其支持单个场景,则需要对在钩子后面加上标签的方式。 标签同钩子形式相同,可以在场景和特性关键词上加标签。 对于特性(Feature)的标签,会加在每个场景上。 Cu...ber可以对一组标签进行测试。 Cu...ber测试中(可以推而广之到任何测试中),凡是有数据库参与,需要在测试之前保证数据库是干净的,并且当前测试不会遗留下数据影响到下一个测试。可以使用事务和Truncate的方式来保证这点,实际上,只要测试环节所需要的数据都由Given中提供,则不会有问题。 第三部分讲应用 ,基本上都是基于Ruby的一些库,但11章的命令行使用方式还是很有意义的, Cu...ber本身就是一个命令行工具,通过命令行,可以对特性文件进行一些过滤,对输出格式进行定制,以及集成到持续集成中。 命令行命令可以使用帮助:--help 一些重要的命令: --tags 过滤标签 --lines 指定行执行 xxx.feature:45 指定行的另一种形式 --format 格式化输出 如果真能把 Cucumber 用起来,用严肃的态度对待每一个步骤,以测试驱动开发,做出来的项目质量应该能大上一个台阶的,是个很好的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值