Rspec 如何组织测试用例?

原创 2013年11月04日 14:44:49

Rails项目中,如何有效的组织测试用例? 个人的一些经验总结在此。

1. 可读性和可维护性是最重要的。

2. 层级和逻辑一定要清楚。

3. context 和 describe 描述一定要清晰. 基本的结构是

describe 测试什么类 do 
   describe 测试什么方法 do 
      context "测试的一个方面" do 
          it "它应该有什么样的表现" do 
          end
      end
   end
end
4. 一段比较好的测试用例代码示例
describe UsersController do
  describe "#create" do
    subject { post :create, :group_id => group_id, :user => attributes }
 
    let(:group_id) { mock(‘group_id’) }
    let(:group)    { mock(‘group’) }
    let(:user)     { mock(‘user’) }
 
    before do
      Group.should_receive(:find).with(group_id).and_return(group)
      group.should_receive(:create_user).with(attributes).and_return(users)
    end
 
    context ‘when attributes are valid’ do
      it ‘saves the user and redirects to the index page’ do
        user.should_receive(:persisted?).and_return(true)
        subject.should redirect_to(:users)
      end
    end
 
    context ‘when attributes are not valid’ do
      it ‘saves the user and redirects to the index page’ do
        user.should_receive(:persisted?).and_return(false)
        subject.should render_template(:new)
      end
    end
  end
end

Ref From: http://blog.codeship.io/2013/12/16/yes-you-should-write-controller-tests.html?utm_source=rubyweekly&utm_medium=email

1, 使用describe 和  context 来区分 不同的测试分类和同一个测试的不同方面

describe 一般用作分类,需要测试什么东西

context 用来对需要测试的东西的不同方面

比如

descirbe Order do #分类
   describe "#status" do 
      context "should include a default value" do  #具体的某一方面
         ... ...
     end 
   end
end

可以参考的文章 http://www.slideshare.net/ihower/rspec-7394497 @ihower的ppt,讲得非常详细,需要翻墙。

2, 区分类方法和实例方法

如 类方法用 .class_method, 实例方法使用 #instance_method 


3, 最好嵌套超过三层测试用例结构

比如 如下的测试代码看起来就非常清楚

describe ClassA do 
    describe "#method_a" do 
        context "x = 1" do 
         end
    end
end

4, 遇到多种交错的测试条件 改怎么办?

比如 我们要测试方法 method_a , 然后 方法 method_a 中有method_b 的条件约束 改怎么办呢?

可以使用Mock method_b方法,这样就能减少method_a 对method_b的依赖

describe ClassA do 

   describe "#method_a" do 
      before(:each) do 
         ClassA.should_recieve(:method_b).and_return(true)
      end
   end

   describe "#method_b" do 

   end
end



5,  在使用 factory_gril initialize一个对象的时候,尽量使用build,如代码

Factory.create(:name)

name = Factory.build(:name)
name.save(:validate_false)
name


6, 设置好 rspec的配置文件,能有利于我们查看spec的输出

#.rspec

--colour
--format d
--drb



Selenium 测试用例组织

当测试用例量多起来后,随后我们根据每天的测试结果,可能会有很多的测试报告。找到一个办法来合理管理case和测试报告就显得很重要,能提工作试效率。根据我的经验,我们可以把用例用一个文件夹装起来,测试报告...
  • warm77
  • warm77
  • 2017年12月28日 12:34
  • 46

第六章测试架构规划及测试用例组织

在编写完具体的测试用例后,我们就要组织一下测试用例,这样方便进行回归测试。结合我们的自动化测试的传统,我们继续采取原来的方法来组织我们的测试用例。 6.1 测试架构规划     由于测试用例执行的...
  • dragonking0318
  • dragonking0318
  • 2015年05月04日 11:51
  • 668

rails rspec测试

基本介绍       RSpec由Steven Baker开发并在2005年发布,全面支持Ruby程序的BDD开发测试方式,并且对于Rails程序有着良好的支持,针对View,Con...
  • yangxing_star
  • yangxing_star
  • 2012年10月13日 15:42
  • 1663

对rspec的“才知道”

对rspec的“才知道”
  • beslow
  • beslow
  • 2014年05月21日 09:47
  • 1455

rails 下搭建RSpec测试环境

1,在项目Gemfile文件下添加如下gem包: group :development, :test do   #封装 RSpec 的程序   gem 'rspec-rails', '~> 3....
  • u010019721
  • u010019721
  • 2016年09月12日 14:51
  • 718

ruby rspec

听闻过TDD有一些时日了,加上之前看过的《敏捷开发的艺术》,是时候试着用这种方法来写一个程序。于是就谷歌到了ruby rspec,同是敏捷开发,但是却是BDD——行为驱动开发。 来自维基百科的简...
  • u012083681
  • u012083681
  • 2013年12月09日 16:28
  • 1135

Rspec 测试

原文:http://my.oschina.net/u/1413049/blog/400668 最近正在学习使用Ruby on Rails进行网站开发,其中有使用rspec进行集中测试,可以吧...
  • sjhuangx
  • sjhuangx
  • 2015年06月01日 21:56
  • 621

RSpec簡介

測試 Testing Developer testing isn’t primarily about verifying code. It’s about making great code. ...
  • today520
  • today520
  • 2014年01月20日 09:31
  • 4036

Rspec简介

英文原文:An introduction to Rspec       在ruby世界中有许多好用的测试框架,rspec算是其中比较流行的一个。rspec使用了和直接测试方法的不同测试思路——测试应...
  • qjpcpu
  • qjpcpu
  • 2013年12月02日 15:51
  • 1256

ruby+rspec自动化测试

1、安装rspec gem install rspec 2、rspec中新建项目 mkdir rspec xjs_test 3、进入xjs_test cd xjs_test 4、xjs_t...
  • juejiang_lovingyou
  • juejiang_lovingyou
  • 2017年03月08日 13:52
  • 661
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Rspec 如何组织测试用例?
举报原因:
原因补充:

(最多只允许输入30个字)