2007-09-04
Rspec的疑问
这里已经有不少人会提到用rspec来代替unit test. 不过就是没有说详细怎么用。 google然后学习,问号一堆。希望会的同学解答下。
1。rspec和unit test相比,最显著的好处是什么?
2。rspec通过 mock stub 来控制 model对象的生成和某些方法的响应结果,为什么需要这样的控制?
3。unit test是针对 class的接口来测试的,那rspec的测试些什么?
4。unit test需要对接口进行true和false两个方面的测试,rspec也需要吗?
5。rspec和unit test的测试出发点,具体有哪些不同之处。
1。rspec和unit test相比,最显著的好处是什么?
2。rspec通过 mock stub 来控制 model对象的生成和某些方法的响应结果,为什么需要这样的控制?
3。unit test是针对 class的接口来测试的,那rspec的测试些什么?
4。unit test需要对接口进行true和false两个方面的测试,rspec也需要吗?
5。rspec和unit test的测试出发点,具体有哪些不同之处。
- 08:20
- 浏览 (3661)
- 论坛浏览 (2057)
- 评论 (6)
- 相关推荐
评论
Readonly 写道
rspec和rcov的结合请看文档:
http://rspec.rubyforge.org/tools/rcov.html
你的测试代码错误是这句:
应该改成:
http://rspec.rubyforge.org/tools/rcov.html
你的测试代码错误是这句:
assert_equal new_user.account_active, 'Yes'
应该改成:
assert_equal new_user.reload.account_active, 'Yes'
十分感谢,问题已解决.
我也在看rspec. 比rails自带的test framework 好用。 看到一个ibm的tech note介绍rspec挺完整的,值得一读
http://www.ibm.com/developerworks/web/library/wa-rspec/
另外,rspec提供一个很有意思的功能,和 Heckle 结合,可以测试你的的测试是否确实是合格的测试。
http://rspec.rubyforge.org/documentation/tools/heckle.html
虽然,我依然认为TDD所提倡的test -> implementation -> design 是一种倒行逆施,容易使程序设计师失去全局观,造成成品和预期的误差增加。
http://www.ibm.com/developerworks/web/library/wa-rspec/
另外,rspec提供一个很有意思的功能,和 Heckle 结合,可以测试你的的测试是否确实是合格的测试。
http://rspec.rubyforge.org/documentation/tools/heckle.html
虽然,我依然认为TDD所提倡的test -> implementation -> design 是一种倒行逆施,容易使程序设计师失去全局观,造成成品和预期的误差增加。
rspec和rcov的结合请看文档:
http://rspec.rubyforge.org/tools/rcov.html
你的测试代码错误是这句:
应该改成:
http://rspec.rubyforge.org/tools/rcov.html
你的测试代码错误是这句:
assert_equal new_user.account_active, 'Yes'
应该改成:
assert_equal new_user.reload.account_active, 'Yes'
小声问一下。
用rspec写测试之后,还能用rcov来查看测试覆盖率吗?
命令是什么呢?
另外,是关于functional test的。
是一个简单的用户激活程序,就是注册某论坛。然后给你发了个电子邮件。
里面有个连接,你点击了之后,才算你成功注册了。
我在controller 有这样一个method:
测试程序是:
yml是:
运行测试的结果总是:
也就是说 user 的属性并没有在运行 这行code之后储存起来。
所以还是原来的值。
可是我不大明白,为什么不能储存属性的变化呢?
请较高人,这个测试的错误在什么地方?
用rspec写测试之后,还能用rcov来查看测试覆盖率吗?
命令是什么呢?
另外,是关于functional test的。
是一个简单的用户激活程序,就是注册某论坛。然后给你发了个电子邮件。
里面有个连接,你点击了之后,才算你成功注册了。
我在controller 有这样一个method:
def active_user
user = User.find_by_id(params[:id])
if user.activation_key.eql?(params[:key])
user.account_active = 'Yes'
user.save!
flash[:notice] = 'Congratulation.'
else
flash[:notice] = 'Invalid activation key!'
end
redirect_to :action => 'index'
end
测试程序是:
def test_active_user
new_user = User.find(1)
get :active_user, :id=>new_user.id, :key=>new_user.activation_key
assert_redirected_to :action => 'index'
assert_equal new_user.account_active, 'Yes'
end
yml是:
one: id: 1 first_name: 'Fname' last_name: 'Lname' account_activation: 'No' activation_key: '9876543210'
运行测试的结果总是:
1) Failure: test_active_user(DemoControllerTest) [C:/demo/test/functional/demo_controller_test.rb:102]: <"No"> expected but was <"Yes">.
也就是说 user 的属性并没有在运行 这行code之后储存起来。
get :active_user, :id=>new_user.id, :key=>new_user.activation_key
所以还是原来的值。
可是我不大明白,为什么不能储存属性的变化呢?
请较高人,这个测试的错误在什么地方?
BDD比TDD更加符合思维惯例,其他就没有特别的优点了
比方说偶们描述一下足球比赛:
一场比赛应该有2个参赛队伍,一个队伍应该有11个上场球员
用TDD得这样写:
你还得注意不要把expected和actual的2个参数位置弄反了,导致出错信息颠倒。
用BDD就没有这样问题了:
完全是符合自然语法习惯的代码编写
RSpec还很容易扩展它的DSL,比方说想天下无贼里面的You should be sorry to me
偶们可以写个class,定义一个be_sorry_to的方法:
然后就可以这样用了:
比方说偶们描述一下足球比赛:
一场比赛应该有2个参赛队伍,一个队伍应该有11个上场球员
用TDD得这样写:
assert_equals(2, match.team.size) assert_equals(11, team.players.size)
你还得注意不要把expected和actual的2个参数位置弄反了,导致出错信息颠倒。
用BDD就没有这样问题了:
match.should have(2).team team.should have(11).players
完全是符合自然语法习惯的代码编写
RSpec还很容易扩展它的DSL,比方说想天下无贼里面的You should be sorry to me
偶们可以写个class,定义一个be_sorry_to的方法:
def be_sorry_to(expected) BeSorryTo.new(expected) end
然后就可以这样用了:
you.should be_sorry_to(me)
rspec本质上就是unit test,只不过在风格写法上有点不同而已,这就是一个个人喜好的问题。你比较喜欢assert_equal呢,还是更符合英文语法xxx.should be xxx呢。当然有人认为风格很重要,是对思维方式的改造,所以很多人现在说要BDD,而不是TDD。
rspec的mock很像Java的easymock,其实你不一定要用。只不过他比你在rails的unit test下面写mock类要方便一些而已(假如你确实需要写mock类的话)。
rspec_on_rails在功能上面一定要说的话,比rails unit test多了helper test和view test,少了integration test。
rspec的mock很像Java的easymock,其实你不一定要用。只不过他比你在rails的unit test下面写mock类要方便一些而已(假如你确实需要写mock类的话)。
rspec_on_rails在功能上面一定要说的话,比rails unit test多了helper test和view test,少了integration test。
发表评论
该博客是同时发布到论坛的,无法评论在论坛已被锁定的帖子
- 浏览: 311759 次
- 来自: 温州

- 详细资料
搜索本博客
我的相册
4
共 1 张
共 1 张
最新评论
-
如何在管理不规范的公司中 ...
我假装给老板打工,老板假装给我付工资.
-- by sword721 -
如何在管理不规范的公司中 ...
LS说的没错,让你成为能影响环境的人!
-- by hyhongyong -
如何在管理不规范的公司中 ...
jack 写道 论坛上常说的管理不够规范,管理混乱。就实 ...
-- by leton2008 -
如何在管理不规范的公司中 ...
LZ 讲的情况确实存在; 在一个公司待久了,和身边的人(管理者)熟了,情况就复杂 ...
-- by hszhl -
如何在管理不规范的公司中 ...
JavaJason 写道这就是一种企业文化,只是这种文化没有找到清晰的归宿 公 ...
-- by hyhongyong






评论排行榜