2015-07-24 3 views
1

Я пробовал Random.stub :rand, 1 do ... end и Kernel.stub :rand, 1 do ... end и Class.stub :rand, 1 do ... end (потому что когда я бегу self.class, где я бегу rand(2) Я получаю Class). Я также попытался заменить rand(2) на Random.rand(2), но это не поможет.Как я могу разбить rand в minitest?

Итак, как я удаляю rand?

ответ

3

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 
Смежные вопросы