【问题标题】:How can I stub rand in minitest?如何在 minitest 中存根 rand?
【发布时间】:2015-10-14 13:29:05
【问题描述】:
我尝试过Random.stub :rand, 1 do ... end 和Kernel.stub :rand, 1 do ... end 和Class.stub :rand, 1 do ... end(因为当我运行self.class 时,我运行rand(2) 我得到Class)。我也尝试用Random.rand(2) 替换rand(2),但没有帮助。
那么我该如何存根 rand?
【问题讨论】:
标签:
ruby-on-rails
ruby
random
minitest
stub
【解决方案1】:
rand 是Kernel 模块的一部分,它混入了每个类。要存根它,您需要在调用 rand 的对象上调用 stub。
这可能是最容易在示例中看到的。在下面的代码中,rand 是Coin 的私有实例方法,因为Coin 隐式继承自Object 和Kernel。因此,我需要在Coin 的instance 上存根。
require "minitest/autorun"
require "minitest/mock"
class Coin
def flip
rand(0..1) == 1 ? "heads" : "tails"
end
end
class CoinTest < Minitest::Test
def test_flip
coin = Coin.new
coin.stub(:rand, 0) do
assert_equal("tails", coin.flip)
end
end
end