`
jack
  • 浏览: 392754 次
  • 来自: 温州
社区版块
存档分类
最新评论

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的测试出发点,具体有哪些不同之处。


分享到:
评论
6 楼 Auckland 2007-11-08  
Readonly 写道
rspec和rcov的结合请看文档:
http://rspec.rubyforge.org/tools/rcov.html

你的测试代码错误是这句:
assert_equal new_user.account_active, 'Yes'

应该改成:
assert_equal new_user.reload.account_active, 'Yes'


十分感谢,问题已解决.
5 楼 halfmile 2007-11-08  
我也在看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 是一种倒行逆施,容易使程序设计师失去全局观,造成成品和预期的误差增加。


4 楼 Readonly 2007-11-07  
rspec和rcov的结合请看文档:
http://rspec.rubyforge.org/tools/rcov.html

你的测试代码错误是这句:
assert_equal new_user.account_active, 'Yes'

应该改成:
assert_equal new_user.reload.account_active, 'Yes'
3 楼 Auckland 2007-11-07  
小声问一下。
用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

所以还是原来的值。
可是我不大明白,为什么不能储存属性的变化呢?
请较高人,这个测试的错误在什么地方?



2 楼 Readonly 2007-09-04  
BDD比TDD更加符合思维惯例,其他就没有特别的优点了
比方说偶们描述一下足球比赛:
一场比赛应该有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)
1 楼 robbin 2007-09-04  
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 入门者学习

    ### RSpec 入门者学习知识点详解 #### 一、RSpec 概述 RSpec 是一个流行的 Ruby 测试框架,主要用于行为驱动开发 (Behavior-Driven Development, BDD)。RSpec 的设计目的是让测试更加自然和易读,使得开发人员能够...

    the rspec book.pdf

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

    rspec测试.pdf

    《RSpec测试:行为驱动开发与RSpec、Cucumber及其他工具》 RSpec是一种用于Ruby语言的单元测试框架,它提倡一种称为“行为驱动开发”(Behavior Driven Development,BDD)的测试方式。RSpec允许开发者以自然语言的...

    RSpec 3.1中文版

    RSpec是Ruby语言开发的一款行为驱动开发(BDD)工具,它通过使用领域特定语言(DSL)来帮助开发人员编写测试用例。RSpec 3.1版本是RSpec框架的更新版,提供了更多的功能和更好的用户体验。Rails是一个用Ruby语言编写的...

    Pragmatic.The RSpec Book.2010.pdf

    #### 一、RSpec框架简介与特性 **RSpec** 是 Ruby 社区中最受欢迎的行为驱动开发(Behavior Driven Development, BDD)框架之一。它为开发者提供了一种灵活的方式来定义应用程序的行为,并通过简洁易读的语法来编写...

    rspec_api_documentation, 从RSpec自动生成API文档.zip

    rspec_api_documentation, 从RSpec自动生成API文档 RSpec Doc为你的Rails API生成漂亮的。查看一个示例文件。更改请查看维基以了解最新的更改。安装将rspec_api_documentation添加到你的文件gem 'rspec_a

    rspec測試工具書

    Rspec是一种行为驱动开发(Behavior-Driven Development,简称BDD)工具,它在软件测试领域被广泛使用。其目的是通过描述软件行为来提高开发人员与非技术团队成员之间的沟通效率。Rspec允许开发者编写一个可读性很强...

    使用RSpec 测试Rails 程序.pdf

    ### 使用RSpec 测试Rails 程序的知识点总结 #### 一、RSpec与Rails结合的基础概念 **RSpec**(RSpec is not a unit testing framework)是一种为Ruby编程语言设计的行为驱动开发(BDD)框架,而**Rails**是基于...

    jruby-1.5.5+OperaWatir+RSpec

    标题 "jruby-1.5.5+OperaWatir+RSpec" 暗示了这是一个关于使用 JRuby 1.5.5 版本、OperaWatir 和 RSpec 进行自动化测试的项目或者资源集合。现在,我们将深入探讨这三个关键组件以及它们在 IT 领域中的应用。 JRuby...

    RSpec.Essentials

    ### RSpec Essentials: Key Insights and Learning Points **RSpec Essentials** is an essential guide for developers looking to enhance their skills in testing Ruby applications using the RSpec framework...

    rspec-api-blueprint-formatter, 从RSpec测试自动生成API文档 !.zip

    rspec-api-blueprint-formatter, 从RSpec测试自动生成API文档 ! RSpec APIBlueprint格式化程序从RSpec测试自动生成API文档 !像这样it 'retrievs the patients medications' do retrieve_medications

    rspec-collection_matchers, 集合基数匹配器,从rspec期望中提取.zip

    rspec-collection_matchers, 集合基数匹配器,从rspec期望中提取 RSpec::CollectionMatchers RSpec::CollectionMatchers 让你在一个例子中表达一个对象集合的预期结果。expect(account.shopping_cart).to have_

    The Rspec Book 最新版 (带Cucmber章节) - 最好的BDD书籍

    《RSpec Book》是关于行为驱动开发(BDD)的一本权威书籍,特别是针对Rspec这一Ruby语言的测试框架。本书的最新版包含了Cucumber章节,使得读者能够更好地理解和实践BDD理念。 行为驱动开发(BDD)是一种软件开发...

    The.RSpec.Book

    ### 《RSpec 书籍》:行为驱动开发与RSpec、Cucumber等工具的深入探索 #### 知识点一:RSpec 概述 - **RSpec**(RSpec)是一种为Ruby编程语言设计的行为驱动开发(Behavior Driven Development, BDD)框架。它通过...

    rspec_junit_formatter, RSpec结果格式化为你的CI可以读取的JUnit.zip

    rspec_junit_formatter, RSpec结果格式化为你的CI可以读取的JUnit RSpec JUnit格式化程序 RSpec 2 & 3结果, Jenkins可以读取。 可能还有其他的CI服务。灵感来自于的工作,在的RSpec格式化程序在对 Reporter的失望...

    Ruby-RSpec和Minitest匹配器来预防N1查询问题

    Ruby提供了两种强大的测试工具,RSpec和Minitest,它们通过匹配器功能可以帮助我们预防这种问题的发生。 RSpec是Ruby中广泛使用的BDD(行为驱动开发)框架,它允许开发者以自然语言的方式编写测试。匹配器是RSpec的...

    BDD开发之rspec和cucumber

    ### BDD开发之rspec和cucumber #### 行为驱动开发(BDD)概览 行为驱动开发(Behavior-Driven Development, BDD)是一种软件开发方法论,它结合了敏捷开发的思想和技术,如测试驱动开发(TDD)和领域驱动设计(DDD)...

    Api-rspec_api_documentation.zip

    Api-rspec_api_documentation.zip,从rspecrspec api doc generator自动生成api文档,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到...

Global site tag (gtag.js) - Google Analytics