写点什么

RSpec 增加了众所翘首以待的 RBehave 功能以供集成测试所需

  • 2007-10-31
  • 本文字数:2396 字

    阅读完需:约 8 分钟

RSpec 是 一个为 Ruby 编写的基于行为驱动开发(简称 BDD,即 Behaviour-Driven Development)的验收测试框架,同时也可用于 Java(事实上它一直都可以运行于 JRuby 中),它提供了一种机制,即由开发人员从业务中获取 验收标准并将它们转换为可读、可运行的示例,以此替代文档、测试和适用于业务的构建报告。

尽管 RSpec 对单元级测试很有用,但它在集成测试中一直存在一个盲点。Dan North 创建了一个独立的扩展, RBehave ,它用 Given…With…Then…这样的格式以一系列的步骤从故事级别来描述行为。(North 最早是在 JBehave 中描述了这种用于获得需求故事的模式)

David Chelimsky 现在已经向 RSpec trunk 中合并了一个纯文本故事运行器(Plain Text Story Runner),它给 RSpec 添加了 RBehave 功能,就像他 他的 博客中描述的那样。

现在看看North 的经典RBehave 示例:

So, North’s classic RBehave example:

require ‘rubygems’<br></br>require ‘rbehave’<br></br>require ’spec’ # for "should" method<p>require ‘account’ # the actual application code</p><p>Story "transfer to cash account",</p><br></br>%(As a savings account holder<br></br>  I want to transfer money from my savings account<br></br>  So that I can get cash easily from an ATM) do<p>  Scenario "savings account is in credit" do</p><br></br>    Given "my savings account balance is", 100 do |balance|<br></br>      @savings_account = Account.new(balance)<br></br>    end<br></br>    Given "my cash account balance is", 10 do |balance|<br></br>      @cash_account = Account.new(balance)<br></br>    end<br></br>    When "I transfer", 20 do |amount|<br></br>      @savings_account.transfer_to(@cash_account, amount)<br></br>    end<br></br>    Then "my savings account balance should be", 80 do |expected_amount|<br></br>      @savings_account.balance.should == expected_amount<br></br>    end<br></br>    Then "my cash account balance should be", 30 do |expected_amount|<br></br>      @cash_account.balance.should == expected_amount<br></br>    end<br></br>  end<p>  Scenario "savings account is overdrawn" do</p><br></br>    Given "my savings account balance is", -20<br></br>    Given "my cash account balance is", 10<br></br>    When "I transfer", 20<br></br>    Then "my savings account balance should be", -20<br></br>    Then "my cash account balance should be", 10<br></br>  end<br></br>end<br></br>

在新的 RSpec 中它可以变成这样,由一个 Ruby 文件定义可用的步骤:

class AccountSteps < Spec::Story::StepGroup<br></br>  steps do |define|<br></br>    define.given("my savings account balance is $balance") do |balance|<br></br>      @savings_account = Account.new(balance.to_f)<br></br>    end<p>    define.given("my cash account balance is $balance" do |balance|</p><br></br>      @cash_account = Account.new(balance.to_f)<br></br>    end<p>    define.then("my savings account balance should be $expected_amount" do |expected_amount|</p><br></br>      @savings_account.balance.should == expected_amount.to_f<br></br>    end<p>    define.then("my cash account balance should be $expected_amount" do |expected_amount|</p><br></br>      @cash_account.balance.should == expected_amount.to_f<br></br>    end<br></br>  end<br></br>end<p>steps = AccountSteps.new do |define|</p><br></br>  define.when("I transfer $amount") do |amount|<br></br>    @savings_account.transfer_to(@cash_account, amount.to_f)<br></br>  end<br></br>end<br></br>

在一个纯文本文件中按照那些步骤定义故事的行为: > Story: transfer to cash account<br></br>  As a savings account holder<br></br>  I want to transfer money from my savings account<br></br>  So that I can get cash easily from an ATM<p>  Scenario: savings account is in credit</p><br></br>    Given my savings account balance is 100<br></br>    And my cash account balance is 10<br></br>    When I transfer 20<br></br>    Then my savings account balance should be 80<br></br>    And my cash account balance should be 30<p>  Scenario: savings account is overdrawn</p><br></br>    Given my savings account balance is -20<br></br>    And my cash account balance is 10<br></br>    When I transfer 20<br></br>    Then my savings account balance should be -20<br></br>    And my cash account balance should be 10<br></br>

由一个 Ruby 文件将他们粘在一起,并运行这些故事:

require 'spec'<br></br>require 'path/to/your/library/files'<br></br>require 'path/to/file/that/defines/account_steps.rb'<p># assumes the other story file is named the same as this file minus ".rb"</p><br></br>runner = Spec::Story::Runner::PlainTextStoryRunner.new(File.expand_path(__FILE__).gsub(".rb",""))<br></br>runner.steps << AccountSteps.new<br></br>runner.run<br></br>

纯文本文件中的那些步骤描述,必须与 StepGroup 中定义的步骤相匹配,这些描述可能会随着步骤数量的增加变得难以理解。Aslak Hellesøy 正在为一个基于浏览器的编缉器工作,它将提供步骤的自动补全,并可以在恰当的位置对参数进行编辑,从而使这一问题得以简化。

查看英文原文 RSpec Trunk Now Includes RBehave-like Story Runner

2007-10-31 09:561173
用户头像

发布了 90 篇内容, 共 14.8 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

服务器 突然断电有什么危害

Geek_f19a80

CSP直通车“助你成为优秀的专业敏捷教练”| 12月线上面授双周末班

ShineScrum

敏捷教练 专业敏捷教练

Fig Player for Mac(多媒体播放器)

展初云

播放器 Mac软件 Fig Player

玩转 Cgroup 系列之一: Cgroup 的起源、重要性和基本工作原理

小猿姐

Linux 内核 资源管理 Cgroup

玩转 Cgroup 系列之二:使用 CPUShares 管理 Cgroup

小猿姐

Linux Cgroup CPUShares I/O 调度

普及高质量融资管理举措 ,打造城投国资领先实践,用友Fast by BIP很在“行”

用友BIP

全球司库 国资数智化

文心大模型驱动的代码助手Comate

百度开发者中心

大模型 #人工智能 智能代码助手

一起学Elasticsearch系列-Query DSL

Java随想录

Java 大数据 ES

理事长走进统信软件,深度探讨社区发展规划 | 理事长走进系列

OpenAnolis小助手

开源 AI 操作系统 龙蜥社区 统信软件

如何走出自己的第二曲线

老张

职场成长 第二曲线

大模型训练:提高NLP性能的关键路径

百度开发者中心

nlp 大模型

普通人为什么要学物理?这个答案最逆天!

博文视点Broadview

首发!文心一言插件精品课,共创大模型应用新范式

飞桨PaddlePaddle

插件 文心一言 AI原生应用

Amazon EC2使用测评

查拉图斯特拉说

服务器 亚马逊云科技 EC2

Xmind for Mac(思维导图软件) 24.01中文版

展初云

Mac 思维导图 XMind

如何正确执行 DORA 指标

SEAL安全

DevOps 持续部署 DORA 企业号11月PK榜

亚马逊云科技大语言模型加速OCR应用场景发展

归来

人工智能 OCR 大语言模型

数据流图:一篇文章教你如何轻松画出来

职场工具箱

流程图 教程分享 绘图工具

轻松理解 Transformers (4) :Decoder 和 Output 部分

Baihai IDP

人工智能 深度学习 AI Transformer 白海科技

聚力未来!云起无垠成为光合组织成员单位

云起无垠

MouseBoost Pro for Mac(右键助手)

展初云

Mac软件 鼠标辅助

用友在ICDAR发表论文,AI实力获国际顶级学术会议认可

用友BIP

人工智能

软件APP定制开发有那些优势?

Geek_16d138

软件定制 app定制开发

利用Prompt工程提升大模型性能

百度开发者中心

深度学习 大模型

RSpec增加了众所翘首以待的RBehave功能以供集成测试所需_研发效能_Sean Miller_InfoQ精选文章