改变思路:能做到从需求到代码的过程转换,逐步细化;
简化代码:力图让每个方法都很小,只专注一件事;
优化代码:当测试代码写不出来,或者需要写很长的时候,说明代码是有问题的,是可以被分解的,需要进一步优化;
便于扩展:当扩展新业务或修改旧业务时,如果测试代码没有成功,则说明扩展和修改不成功;
时半功倍:貌似写测试代码很费时,实际在测试、部署和后续扩展中,测试代码将节省更多的时间。
环境搭建
笔者采用的测试环境是比较流行通用的框架:RSpec + Factory Girl,并用autotest自动工具。RSpec是一种描述性语言,通过可行的例子描述系统行为,非常容易上手,测试用例非常容易理解。Factory Girl可以很好的帮助构造测试数据,免去了自己写fixture的烦恼。Autotest能自动运行测试代码,随时检测测试代码的结果,并且有很多的插件支持,可以让测试结果显示的很炫。
第一步 安装rspec和rspec-rails
在命令行中执行如下命令:
$ sudo gem install rspec v = 1.3.0 $ sudo gem install rspec-rails v = 1.3.2
安装完成后,进入rails应用所在的目录,运行如下脚本,生成spec测试框架:
$ script/generate rspec exists lib/tasks identical lib/tasks/rspec.rake identical script/autospec identical script/spec exists spec identical spec/rcov.opts identical spec/spec.opts identical spec/spec_helper.rb
第二步 安装factory-girl
在命令行中执行如下命令:
$ sudo gem install factory-girl
在config/environment/test.rb中,加入factory-girl这个gem:
config.gem "factory_girl"
在spec/目录下,增加一个factories.rb的文件,用于所有预先定义的model工厂。
第三步 安装autotest
在命令行中执行如下命令:
$ sudo gem install ZenTest $ sudo gem install autotest-rails
然后设置与RSpec的集成,在rails应用的目录下,运行如下的命令,可以显示测试用例的运行结果。
RSPEC=true autotest or autospec
在自己的home目录下,增加一个。autotest设置所有的Rails应用的autotest插件。当然,也可以把这个文件加到每个应用的根目录下,这个文件将覆盖home目录下的文件设置。autotest的插件很多,笔者用到如下的plugin:
$ sudo gem install autotest-growl $ sudo gem install autotest-fsevent $ sudo gem install redgreen
设置。autotest文件,在。autotest中,加入如下代码。
require ‘autotest/growl‘ require ‘autotest/fsevent‘ require ‘redgreen/autotest‘ Autotest.add_hook :initialize do |autotest| %w{.git .svn .hg .DS_Store ._* vendor tmp log doc}.each do |exception| autotest.add_exception(exception) end end