关于利用rspec的文章感觉蛮少的,准备写一个简洁的rspec 实践心得,从零开始,一步步深入探索
顺便说几句关于BDD的看法,感觉这种开发方式还是很靠谱的,个人认为传统的TDD开发太乏味,让人感觉在浪费时间,而且,TDD开发出的东西,虽然功能上可以保证正确性,但站在产品的角度上,结果往往与客户的期望相去甚远,二者最大的不同是,BDD的目的是不仅仅在于检验结果的正确性,还有就是让测试用例描述需求成为可能,这样的话,写测试用例的过程可以让程序员逐步的了解需求,也就是明白自己到底需要做出什么样的产品
gem install rspec
gem install rspec-rails
rspec-rails是rspec的rails扩展库,作用无非是简化生成测试骨架以及运行测试用例
控制器
ruby script/generate rspec_controller dog bark fetch
后面跟的是试图文件的名字
模型
ruby script/generate rspec_model User
自动生成的代码如下
require 'spec_helper'
describe User do
before(:each) do
@valid_attributes = {
:username => "sharp"
}
end
it "should create a new instance given valid attributes" do
User.create!(@valid_attributes)
end
end
需要说明的是describe方法生成了Spec::Example::ExampleGroup的一个子类,it方法生成了should_×××××的方法,也就是describe方法生成了一个样例组,而通过it生成了一个个都样例。
Spec::Mock
在一个系统中,会有很多对象代理其他的对象,那么在测试这个对象的时候,如果它所需要代理的对象还没有开发出来,那么就需要模拟一些它所代理的对象。
Method stubs 和 messsage expectations 是方法级的概念,而 test doubles 或者 test-specific extensions则是对象级的概念。
test double是一种在样例中可以代表其他对象的对象,根据它的用法,类似于mocks, stubs, fakes ,imposters等等,需要注意的是mock是对象级,而stub是方法级的。
待续