#参考http://www.slideshare.net/ihower/rspec-7394497
#入门,框架
require 'rspec'
class Order
#自定义类
end
describe Order do #一个类别
#可以Nested加入想要测试的方法是哪个
describe "#amount" do #通常用#开头表示实例方法,.开头表示类方法
context "when user is vip" do #可以再nested加入不同情境
before(:each) do #每段it之前执行,before(:all)整段describe执行一次
@user = User.new(:is_vip => true)
@order = Order.new(:user => @user)
end
it "should discount five percent if total > 1000" do #每个it就是一小段测试
#should 和 should_not
true.should == false
end
it "should discount ten percent if total > 1000" do #每个it就是一小段测试
pending #可以先列出来打算要写的测试
end
after(:each) do #每段it执行之后,after(:all)整段describe执行一次
end
end
context "when user is not vip" do
it "should discount three percent if total > 1000" do #每个it就是一小段测试
end
end
end
end
describe "A Order" do #另一个类别
context "another test" do
let(:user) { User.new(:is_vip => false)} #Lazy。let(:name){...}有需要才会运算,相较于before增加执行速度,let!则是非lazy版
end
end
target.should be_true #=target.should be_true
还有be_false,be_nil等
target.should be_a_kind_of(Array)#target.class.should == Array
还有be_an_instance_of,respond_to
have_key,include,have(3).items # items.length == 3
任何be_开头
target.should be_empty #target.empty?.should == true
target.should be_blank #target.blank?.should == true
target.should be_admin #target.admin?.should == true
expect 和 to 期望一段程序会改变某个值或抛出异常
it "should ..." do
expect {
order.ship!
}.to chang {order.status}.from("new").to("shipping")
end
上面的跟下面的版本的一样
it "should..." do
order.status.should == "new"
order.ship!
order.status.should == "shipping"
end
异常
expect {
order.paid? = false
order.ship!
}.to raise_error(NotPaidError)
另一版
lambda {
order.paid? = false
order.ship!
}.should_raise(NotPaidError)
使用subject可省略receiver
describe Order do
subject {Order.new(:status => "new")}
it{ should be_valid } # subject.vaild?.should == true
its(:status){should == "New"} #its可以省略receiver
specify{should be_valid} #一些别名,与it一样
example{should be_valid}
end
总结:一些惯例
1、一个rb文件配一个_spec.rb文件,
容易找,watchr等工具容易设定,editor有支援快捷键
2、输出格式
rspec filename.rb 不产生文件
rspec filename.rb -fs 输出spcdoc文件
rspec filename.rb -fh 输出html文件
已经入门了,继续进阶...
RSpec Mock 使用假物件替换真的物件
Stub
回传设定好的值
@user = stub("user")
@user.stub(:name).and_return("ihower")
@user.name #"ihower"
@customer = stub("customer").as_null_object
@customer.foobar #nil
@client = stub("client")
@client.stub_chain(:foo, :bar, :baz).and_return("blah")
@client.foo.bar.baz #"blah"
用来测试最后的状态
describe "#receiver_name" do
it "should be user name" do
user = stub(:user)
user.stub(:name).and_return("ihower")
order = Order.new(:user => user)
order.receiver_name.should == "ihower"
end
end
Mock 如果没有呼叫到就算失败
@gateway = mock("ezcat")
@gateway.should_reveive(:deliver).with(@user).and_return(true)
@gateway.deliver
一般测试流程
>Given给定条件
>When当事件发生
>Then则结果要是如何
Mock测试流程
>Given给定条件
>Expect预期会发生什么事
>When当事件发生
一般测试是检查物件的最后状态
Mocks可以让我们测试物件之间的行为
Mocks Aren't Stubs 请看http://martinfowler.com/articles/mocksArentStubs.html
原文后面还介绍很多东西,这里就不列举了。
分享到:
相关推荐
still_life是测试单元,minitest,RSpec和Capybara的测试框架增强功能,用于记录在E2E或单元测试执行期间呈现的所有HTML响应正文文本
带有Rspec测试框架的Ruby。 产品特点 用户故事 现有功能: As a small inn owner So that I can keep track of my stock I want to maintain an inventory of items As a small inn owner So that I know when I ...
Ruby,带有Rspec测试框架。 产品特点 用户故事 As a customer, So that I can add money to my account, I want to be able to make a deposit As a customer, So that I can take money out of my account, I want ...
基于Rspec的Java 8测试框架 样品测试 Spectre使用Spec后缀运行所有方法 package org.eck.spec ; import static org.eck.spec.Spectre.describe ; import static org.eck.spec.Spectre.before ; import static org....
RSpec驱动的API测试框架 寻找项目维护者 我正在寻找项目维护人员,以帮助使机载设备保持最新状态且无错误,同时避免功能升级和保持向后兼容性。 如果您想提供帮助,请评论。 安装 安装机载: $ gem install ...
RSpec模拟 rspec-mocks是rspec的测试双框架,它支持方法存根,伪造以及对生成的测试双和真实对象的消息期望。安装gem install rspec # for rspec-core, rspec-expectations, rspec-mocksgem install rspec-mocks # ...
speculate.rs一个RSpec启发了Rust的最小测试框架。 安装将推测添加到Cargo.toml的dev-dependencies部分:[dev speculate.rs RSpec启发了Rust的最低限度测试框架。 安装将推测添加到Cargo.toml的dev-dependencies部分...
rspec-rails rspec-rails将测试框架带到作为其默认测试框架Minitest的替代品。 在RSpec中,测试不仅仅是验证您的应用程序代码的脚本。 它们也是规范(或简称为spec ):用纯英语表示的有关应用程序行为的详细说明。 ...
观众:基于RSpec的Crystal的功能丰富的测试框架
TDD Rails入门 推荐的Ruby版本2.2.0 确保已安装postgres,最简单的方法是下载应用程序 Mac: : Windows: : 要开始,您需要做的就是克隆项目并将其放入cd中。 ...cd GettingStartedWithTDDRails/ ... rspec
NSpec是用于.NET的xSpec(上下文/规范)风格的BDD(行为驱动开发)测试框架。 NSpec旨在通过指定已声明的上下文或场景中的行为来推动开发。 NSpec受到RSpec和Mocha的极大启发。 文献资料 有关入门和文档说明,请...
紧急情况一个受RSpec和Cucumber启发的Java测试框架,其目标是通过表达性测试来帮助实现更好的设计给我看看代码! import com.xdd.Spec ;import static org.junit.Assert.* ;public class CalculatorSpec extends ...
这个源码案例是一个不错的驱动开发测试框架,源码Quick,Quick是一个适用于Swift和Objective-C的行为驱动开发测试框架。借鉴了RSpec, Specta以及Ginkgo。
rspec-given, RSpec规范的Given/When/Then 关键字 用于RSpec和Minitest主机的 Given/When/Then 覆盖给定的rspec,给定的minitest,以及给定的内核,版本 3.5.3 ...给定的rspec和minitest是你喜爱的测试框架的扩展,在编
幸运的是几周前,我决定自己写一个单元测试框架(因为我有这个能力:)),接着我就有了一个可用的测试框架,问题解决了。但是,这让我想到一个问题,最少可以用多少代码写成一个可用的单元测试框架? 一个最小可用的...
框架:测试驱动开发简介 为什么我们要在我们的应用程序中实施测试? (5 分钟,0:05) 随着应用程序复杂性的增加,我们需要一个安全网。 我们需要一些东西来确保我们“不伤害”。 我们需要一系列自动化测试。 这些是...
气味规格气味规范是一个受启发的小型 SML 测试框架。 注意:这仅在进行过测试。例子写一些 sml fun fact 0 = 1 | fact n = n * fact(n- 1 ); 写一些测试use " ./file_containing_fact_function.sml " ;val tests = ...
ruby on rails 的测试工具,敏捷开发工具。。。。
如果您不熟悉测试,那么我已经编写了有关使用RSPec进行Rails测试的教程:关于使用此gem来建立测试框架。 gem修改Rails应用程序并配置: –安装支持Rails的RSpec gem –测试网页–的干净选择 –创建测试数据 –在Web...
用于使用RSpec,Capybara,Selenium和SitePrism构建用于无头和浏览器测试的测试自动化框架的原型。 设置 Clone this project bundle 运行规格 rspec # to run all specs, with default driver and env rspec -t ...