加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – RSpec类变量测试

发布时间:2020-12-17 04:23:20 所属栏目:百科 来源:网络整理
导读:我正在使用RSpec测试gem中的类级实例变量(和setter).我需要测试以下内容: 如果从未使用过setter,则会提供正确的默认值. 可以通过setter成功更新变量. 显然这里有一个运行订单问题.如果我使用setter更改值,则会丢失默认值的内存.我可以在setter测试之前将其
我正在使用RSpec测试gem中的类级实例变量(和setter).我需要测试以下内容:

>如果从未使用过setter,则会提供正确的默认值.
>可以通过setter成功更新变量.

显然这里有一个运行订单问题.如果我使用setter更改值,则会丢失默认值的内存.我可以在setter测试之前将其保存到变量中,然后在结束时重置该值,但是只有在所有setter测试都遵循相同的做法时才会保护我.

测试变量默认值的最佳方法是什么?

这是一个简单的例子:

class Foo
  class << self
    attr_accessor :items
  end
  @items = %w(foo bar baz) # Set the default
  ...
end

describe Foo do

  it "should have a default" do
    Foo.items.should eq(%w(foo bar baz))
  end

  it "should allow items to be added" do
    Foo.items << "kittens"
    Foo.items.include?("kittens").should eq(true)
  end
end

解决方法

class Foo

  DEFAULT_ITEMS = %w(foo bar baz)
  class << self
    attr_accessor :items
  end
  @items = DEFAULT_ITEMS

end

describe Foo do
  before(:each) { Foo.class_variable_set :@items,Foo::DFAULT_ITEMS }

  it "should have a default" do
    Foo.items.should eq(Foo::DEFAULT_ITEMS)
  end

  it "should allow items to be added" do
    Foo.items << "kittens"
    Foo.items.include?("kittens").should eq(true)
  end
end

或者更好的方法是重新加载课程

describe 'items' do
  before(:each) do
    Object.send(:remove_const,'Foo')
    load 'foo.rb'
  end

end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读