`
duoerbasilu
  • 浏览: 1486071 次
文章分类
社区版块
存档分类
最新评论

故事驱动开发实践-一次完整的使用过程

 
阅读更多

本文的例子参考 The Cucumber Book

以前一直做单元测试,虽然不够彻底,但是一直有些坚持。在实践单元测试的过程中,总是会有一种感觉,无法从需要和总体上做程序,流程总是不顺畅。也许是我实践的办法不对吧。总是无法将测试驱动开发进行到底。在追赶的项目进度面前,早点搞定,成了我的座右铭。但是项目快结束后,看着自己的代码,我总有一种欲哭无泪的感觉,总想重构代码。但不敢下手,也无从下手。谁叫我的测试代码不够彻底呢。怕修改代码后,会带来新的bug。 现在实践一下故事驱动开发。其实对故事驱动开发非常有兴趣。因为我特别喜欢故事面板,一个项目,在我看来,无非就是一个一个的故事组成的。


  1. 工具
    rails3.2
    cucumber

  2. 新建项目
    rails new squeaker --skip-test-unit


  3. 修改Gemfile文件
    group :test do  
      gem 'cucumber-rails', '1.3.0'
      gem 'database_cleaner', '0.8.0'
      gem 'rspec-rails', '2.10.0'
      gem 'factory_girl', '3.5.0'
    end
    


    bundle install

  4. create cucumber files for rails
    rails generate cucumber:install

  5. 建立ctags索引
    ctags -R --exclude=*.js --exclude=.log * . ~/.rvm/gems/ruby-1.9.2-p320/gems/

  6. 编写故事用例
    Feature: 查看消息
    
      Scenario: 查看其他用户的消息
        Given 有一个注册用户A 
        And 用户A提交了一条信息 "这是我的消息" 
        When 我访问了该用户的页面
        Then 我应该可以看到 "这是我的消息"

  7. steps 源代码
    # -*- encoding: utf-8 -*-
    Given /^有一个注册用户A$/ do
      Factory(:user)
    end
    
    Given /^用户A提交了一条信息 "(.*?)"$/ do |arg1|
      User.count.should == 1
      Factory(:message, :content => arg1, :user => User.first)
    end
    
    When /^我访问了该用户的页面$/ do
      User.count.should == 1
      visit(user_path(User.first))
    end
    
    Then /^我应该可以看到 "(.*?)"$/ do |text|
      page.should have_content(text)
    end
    



  8. factory_girl的支持
    require 'factory_girl'
    
    FactoryGirl.define do  
      factory :user do |f| 
        f.username 'testuser'
      end 
    
      factory :message do |f| 
        f.association :user
        f.content 'Test message content'
      end 
    end
    

  9. 新建两个model对象
    rails g model user username:string
    rails g model Message user_id:integer content:string

    rake db:migrate db:test:prepare
    

  10. controller 和view略

    整体结构把握好了,其他的就好做了

    Given : context 运行的上下文环境
    When : event 事件
    Then: 结果 should



  11. 资源地址:
    cucumber rails :https://github.com/cucumber/cucumber-rails
    cucumber: https://github.com/cucumber/cucumber




分享到:
评论

相关推荐

    Windows内核安全与驱动开发光盘源码

    2.5 Windows的驱动开发模型 29 2.6 WDK编程中的特殊点 30 2.6.1 内核编程的主要调用源 30 2.6.2 函数的多线程安全性 30 2.6.3 代码的中断级 32 2.6.4 WDK中出现的特殊代码 32 第3章 字符串与链表 35 3.1 字符...

    Windows内核安全驱动开发(随书光盘)

    2.5 Windows的驱动开发模型 29 2.6 WDK编程中的特殊点 30 2.6.1 内核编程的主要调用源 30 2.6.2 函数的多线程安全性 30 2.6.3 代码的中断级 32 2.6.4 WDK中出现的特殊代码 32 第3章 字符串与链表 35 3.1 字符...

    程序员为什么还要刷题-working-with-tests-practice-tdd-rspec-and-learn:与测试一起工作-实践-t

    程序员常刷题TDD、RSpec 和 Learn 介绍 目标 定义代码测试的目的。 阅读 RSpec 测试。...通过learn命令运行测试。...再说一次,您暂时不会编写自己的测试,因此我们将仅简要介绍此过程。 从概念上讲,TDD 很简单: 首先

    asp.net知识库

    .NET 2.0 泛型在实际开发中的一次小应用 C#2.0 Singleton 的实现 .Net Framwork 强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整的动态加载/卸载程序集的解决方案 ...

    Java毕业设计-基于ssm框架开发的vue社区互助平台--论文-附毕设源代码+说明文档.rar

    资源介绍 本资源包是一个基于SSM(Spring、SpringMVC、MyBatis)框架与Vue....总的来说,本资源包是一个集学习、实践、开发于一体的优质资源,无论是对于毕业设计的学生还是对于Web开发爱好者来说,都具有很高的价值。

    Java毕业设计-基于ssm框架开发的绿色农产品推广应用网站+vue-毕业论文(附源代码).rar

    此项目不仅包含了完整的源代码,还附带了详细的毕业论文,为研究者提供了从理论到实践的全方位指导。毕业论文从项目背景、需求分析、系统设计、实现过程到测试与优化等方面进行了深入阐述,为其他类似项目的开发提供...

    grub4dos-0.4.4-2009-01-11

    假如我们某一天因为某些原因,需要删除或格式化该分区,或者做一些会引起该分区序号变化的操作(比如用 pqmagic 在该分区前添加或删除分区),就需要预先重装一次grub,重新指定存放stage2文件的分区,否则将无法...

    Virbox 开发者工具盒-软件加密工具

    一次加密,多种许可形式完美兼容,假如您的用户不希望使用硬件,您可以在加密方案不变更的情况下,迅速切换至云锁或者软锁。 优势6:强悍的硬件性能 精锐 5 拥有精锐系列迄今运行速度最快的芯片,性能格外强劲。采用...

    基于 AVR 的单片嵌入式系统原理与实践应用

    每一次运算操作的结果将影响和改变状态寄存器(SREG)的值。 使用条件转移、无条件转移和调用指令,可以直接访问全部Flash程序存储器空间以及控制程序的执行顺序。大部分AVR指令为单一16位格式,只有少数指令为32位...

    关于ds18b20程序

    //12M,一次6us,加进入退出14us(8M晶振,一次9us) } /******************************************************** * DS18B20初始化 * ********************************************************/ bit Ds18b20_...

    毕设源码-VB简单小游戏设计(论文+源代码).rar

    游戏设计简洁明了,易于理解,适合初学者作为入门实践项目,也适合有一定编程基础的学生进行二次开发或定制。 论文部分详细介绍了项目的背景、设计思路、技术实现和测试过程,为读者提供了从构思到实现的全过程指导...

    HBase企业应用开发实战

    大数据需要落地,需要开源技术来驱动新一轮的变革,而HBase作为大数据落地过程中的神兵利器,已经一次又一次证明了其巨大价值。本书不同于其他HBase的翻译版书籍,由来自国内互联网最前沿的实战派资深人士撰写而成,...

    自己动手写操作系统(含源代码).part2

    而在章的内部,一项大的功能被分解成许多小的步骤,通过完成每个小的步骤,读者可以不断获得阶段性的成果,从而让整个开发过程变得轻松并且有趣。 本书适合各类程序员、程序开发爱好者阅读,也可作为高等院校操作...

    自己动手写操作系统(含源代码).part1

    而在章的内部,一项大的功能被分解成许多小的步骤,通过完成每个小的步骤,读者可以不断获得阶段性的成果,从而让整个开发过程变得轻松并且有趣。 本书适合各类程序员、程序开发爱好者阅读,也可作为高等院校操作...

    代码语法错误分析工具pclint8.0

    如果你在安装过程中选定了使用某个开发环境,安装程序会在你安装的目录下生成一个en v-xxx.lnt的文件,例如选择了Source Insight就会有一个env-si.lnt文件。用编辑器打开 该文件,在该文件开始的注释中说明了...

    stm32酷系统Q-SYS V2.0

    问题在于,随着他们一次次的添加新的应用到这个系统里,系统也变得越来越松散、危险。因为他们并没有发现,在这众多的应用中,是有很多共同之处可以被剥离、被抽象、被统一的。当你将重复的代码按照一定的框架统一...

    软件工程知识点

    因此,对软件的维护也可以看成为对软件的再一次开发。在这个时期,对软件的维护主要涉及三个方面的任务,即改正性维护、适应性维护和完善性维护。 2.瀑布模型 瀑布模型诞生于20世纪70年代,是最经典的并获得最广泛...

Global site tag (gtag.js) - Google Analytics