我在测试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
有没有人知道我可以为风暴方法编写测试的方法?
答案 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