在rspec

时间:2016-10-01 15:45:06

标签: ruby rspec

我在测试rspec中的一些随机行为时遇到了一些麻烦。我有一个类的方法,如果一个随机生成的数字等于10,它应该改变一个类实例变量。我无法找到用rspec正确测试它。

这是类

的代码
class Airport
    DEFAULT_CAPACITY = 20
    attr_reader :landed_planes, :capacity
    attr_accessor :weather

    def initialize(capacity=DEFAULT_CAPACITY,weather = "clear")
        @landed_planes = []
        @capacity = capacity
        @weather = weather
    end

    def stormy
        if rand(10) == 10 then @weather = "stormy" end
    end
end

有没有人知道我可以为风暴方法编写测试的方法?

1 个答案:

答案 0 :(得分:1)

一个选项是使用rspec --seed 123启动rspec,这将确保您的随机数始终可预测。但这会影响随后对rand,shuffle,sample等的所有调用。

另一种方法是更改​​类以注入randnumber生成器:

class Airport
  DEFAULT_CAPACITY = 20
  attr_reader :landed_planes, :capacity
  attr_accessor :weather

  def initialize(capacity=DEFAULT_CAPACITY,weather = "clear", randomizer = ->(n) { rand(n)})
    @landed_planes = []
    @capacity = capacity
    @weather = weather
    @randomizer = randomizer 
  end

  def stormy
    if @randomizer.call(10) == 10 then @weather = "stormy" end
  end

end