我已经尝试了Kernel.stub :rand, 1 do ... end
和Class.stub :rand, 1 do ... end
以及self.class
(因为当我运行rand(2)
我跑Class
时,我得rand(2)
})。我也尝试用Random.rand(2)
替换names = {age:sorted([name for index,name in enumerate(NAMES) if age == AGES[index]]) for age in sorted(set(AGES))}
print(names)
,但它没有帮助。
那我怎么把兰德剔除?
答案 0 :(得分:6)
rand
是混合到每个类中的Kernel
模块的一部分。要对其进行存根,您需要在调用stub
的对象上调用rand
。
在一个例子中可能最容易看到。在以下代码中,rand
是Coin
的私有实例方法,因为Coin
隐式继承自Object
和Kernel
。因此,我需要查看Coin
的实例。
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