`
biyeah
  • 浏览: 201390 次
  • 来自: ...
社区版块
存档分类
最新评论

RSpec测试框架

    博客分类:
  • Ruby
 
阅读更多
#参考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


原文后面还介绍很多东西,这里就不列举了。
分享到:
评论

相关推荐

    RSpec-bank-main.rar

    RSpec-bank是基于Ruby编程语言和RSpec测试框架的一个项目,主要用于模拟银行系统的核心功能。这个项目的源码深入揭示了如何使用RSpec进行行为驱动开发(BDD)以及如何构建一个简单但完整的银行应用。下面,我们将...

    rspec_receitas:几个RSpec测试配方

    `rspec_receitas` 是一个专注于RSpec测试框架的项目,它提供了一系列测试示例,用于帮助开发者更好地理解和应用RSpec在Ruby on Rails 5应用程序中的实践。RSpec是Ruby社区广泛使用的测试工具,它提供了行为驱动开发...

    Ruby-stilllife是测试单元minitestRSpec和Capybara的测试框架增强功能

    Ruby-stilllife是一款专为Ruby开发测试环境设计的工具,它着重于提升单元测试、minitest、RSpec以及Capybara的测试框架效率。这个工具的独特之处在于它能够记录并分析在端到端(E2E)或单元测试过程中产生的所有HTML...

    RSepc rails 测试框架介绍

    RSepc 是一款基于 Ruby 的行为驱动开发(BDD)测试框架,它被广泛应用于 Rails 应用程序的测试。RSpec 提供了一种清晰且简洁的方式来编写可读性强的测试代码,使得测试用例更像是对软件行为的规范描述,而不是简单的...

    Ruby for Rails中文版》.(美)David Black ).zip

    5. **自动化测试**:Rails内置了Test::Unit和RSpec测试框架,鼓励开发者编写测试用例,确保代码质量。 6. **社区支持**:Rails拥有庞大的开发者社区,提供了丰富的插件和指南,使得开发过程更加高效。 这本书籍...

    Ruby-开箱即用的Rails项目模板

    "干掉更多重复劳动,使开发专注于简洁的业务逻辑"这部分,暗示了该模板可能集成了诸如ActiveRecord的模型生成、RSpec测试框架、 FactoryBot工厂对象等工具,以简化数据操作和测试编写。这些工具可以帮助开发者快速...

    the rspec book.pdf

    《RSpec Book》是一本专注于Rspec的权威指南,它详细阐述了如何使用Rspec这个强大的测试框架进行行为驱动开发(BDD)。Rspec是Ruby编程语言中的一个测试库,它使得编写可读性强、表达力丰富的测试代码成为可能。这...

    rails学习教程

    Rails强调TDD(测试驱动开发),内置了Test::Unit和RSpec测试框架。编写测试可以帮助你确保代码质量,提前发现和修复问题。 八、Scaffolding Rails的scaffolding功能能快速生成一个基本的CRUD(创建、读取、更新、...

    配置rails环境

    7. **运行测试**:Rails项目通常包含测试套件,可以使用`rake test`或`rspec`(如果使用RSpec测试框架)来运行这些测试,确保代码正常工作。 8. **配置开发环境**:除了基本的Rails设置,开发者还可能需要配置其他...

    linux-shpec一个shell测试框架

    Shpec的核心概念基于RSpec,这是一个广泛应用于Ruby社区的BDD(行为驱动开发)测试框架。它借鉴了RSpec的语法和理念,将测试描述为人类可读的自然语言,使得测试代码更加清晰易懂。 在使用shpec时,首先你需要安装...

    Watir测试框架介绍

    使用Watir编写测试时,通常会结合其他测试框架,如RSpec,以提高测试的结构和可读性。例如: ```ruby require 'watir' require 'rspec' RSpec.describe 'Google Search' do before(:each) do @browser = Watir::...

    ruby_知识库pdf

    此外,还可能涉及Git版本控制、Rake构建工具、Test::Unit或RSpec测试框架,以及Bundler管理Gem依赖等。 在Ruby中,类和对象是面向对象编程的核心。每个对象都是其类的一个实例,类定义了对象的行为和属性。你可以...

    jruby-1.5.5+OperaWatir+RSpec

    RSpec 是一个流行的 Ruby 测试框架,主要用于行为驱动开发(BDD)。它提供了一种声明式的方式来描述对象应该如何表现,以及期望的行为结果。RSpec 的语法使得测试代码更接近自然语言,让非程序员也能理解测试目的。...

    basicmath:这是一个回购,旨在学习有关Rspec和使用基本算术运算的测试驱动开发

    总的来说,通过这个"basicmath"项目,你不仅可以巩固Ruby的基础知识,还能掌握Rspec测试框架的精髓,进一步提升你的编程技能。在TDD的指导下,你将学会如何写出更加健壮、可靠的代码,这在实际开发中是非常重要的。...

    gilded_rose_kata:经典的技术测试kata

    带有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 ...

    W6D5-专案:CSS花絮,RSpec作业,TDD专案

    在本项目“W6D5-专案:CSS花絮,RSpec作业,TDD专案”中,我们涉及了三个核心主题:CSS样式设计、RSpec测试框架以及Test-Driven Development(TDD)方法。让我们逐一深入探讨这些知识点。 首先,CSS(Cascading ...

    基于Ruby的Web自动化测试框架平台应用.rar

    总之,基于Ruby的Web自动化测试框架平台的应用涵盖了多种技术,包括Selenium WebDriver、Cucumber和RSpec,它们共同为企业提供了一种高效、可扩展的解决方案,以确保Web应用的质量和可靠性。通过深入学习和实践,...

    bank_tech_test:一项实践技术测试; 确保高代码质量

    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 ...

    pg-challenges:用于存储我自己编写的编码挑战和测试的文件夹

    这个项目的核心是使用Ruby语言,特别是与RSpec测试框架的结合,来提升开发者在Ruby功能方面的技能。 描述中提到,“PG的挑战”可能指的是与PostgreSQL数据库相关的编程挑战,但考虑到标签只列出了“Ruby”,这里更...

    boris-bikes:使用ruby和rspec#介绍TDDBDD

    在这个“boris-bikes”项目中,我们将探讨如何使用Ruby语言和RSpec测试框架来实践TDD和BDD。 **测试驱动开发(TDD)** TDD是一种软件开发方法论,其核心思想是在编写实际功能代码之前先编写测试用例。通过这种方式...

Global site tag (gtag.js) - Google Analytics