2016-10-01 27 views
1

我在rspec中測試一些隨機行爲時遇到了一些麻煩。如果一個隨機生成的數字等於10,我有一個類應該改變其中一個類實例變量的方法。無論如何我無法找到正確測試rspec。在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

一個選項是啓動rspec與rspec --seed 123這將確保您的隨機數始終是可預測的。但是這會影響所有後續調用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