Rspec 测试基础知识

来源:互联网 发布:淘宝开学季有什么优惠 编辑:程序博客网 时间:2024/06/07 06:42

Rspec 测试基础知识

阅读以下文档,你将了解:

  • rpsec 测试是什么
  • rspec 要点(快速上手rspec测试)

What is RSPEC

NOTE:
Rspec是一个行为驱动开发工具(Behaviour-Driven Development tool, BDD).
BDD是一种结合了Test-Driven Development, Domain Driven Design 和 Acceptance
Test-Driven Planning 的软件开发方式。Rspec帮助你做那种程式的TDD部分,关注
TDD的文档和设计方面。

NOTE:
原文:
RSpec is a Behaviour-Driven Development tool for Ruby programmers. BDD is an approach
to software development that combines Test-Driven Development, Domain Driven Design,
and Acceptance Test-Driven Planning. RSpec helps you do the TDD part of that equation,
focusing on the documentation and design aspects of TDD.

为什么要写测试

  • 很容易让你发现一些低级错误和产生一些灵感.
    比如,发现单词拼写错误、低级的逻辑错误、漏写了validates等,
    或者发现某个方法有更加贴切的名字、找到某个方法更好的实现方式。
    当你考虑测试覆盖是否全面的时候,其实也会提醒你方法实现的时候是否考虑到了所有情况和逻辑分支。
  • 能增强代码可读性,让其他人更加轻松地读懂你的代码。
  • 便于重构代码时,保证功能正确与逻辑不受影响。

The Point about RSPEC

  • describe, context, it
    NOTE:
    describe 用来表述独立的功能
    context 用来表述独立功能下的一个场景

  • let, let!区别
    NOTE:
    let 是延迟执行(lazy-evaluated),当第一次显示调用是才会执行;
    let! 在每个用例执行前调用

  • before
    NOTE:
    before 默认设置为before(:each);
    before(:all)中对数据库的操作不在每个用例的事务中,每个用例执行后不会自动清理,需要在after(:all)中来清理数据

  • expect
    NOTE:
    多用expect,而不是should

示例

let(:user){当用到user时,初始化user}before(:each) doenddescribe "#示例方法名" do  context "某个场景下,所需要的条件" do    it "返回的结果" do       xxx.示例方法       except(XXX).to eq XXX    end  endend

rspec相关的文档:
- http://betterspecs.org/zh_cn/ (大家可以多看看每条建议在github上的讨论)
- http://zhongfox.github.io/blog/rails/2013/09/22/rspec-best-practice/
- https://www.relishapp.com/rspec/
- http://stackoverflow.com/questions/5359558/when-to-use-rspec-let
- http://blog.joshsoftware.com/2013/11/23/pro-tips-for-writing-better-rspec-tests/
- http://everydayrails.com/
- http://lmws.net/describe-vs-context-in-rspec

原创粉丝点击