代码之家  ›  专栏  ›  技术社区  ›  Camden Narzt

我怎样才能在最短的时间内完成任务?

  •  4
  • Camden Narzt  · 技术社区  · 9 年前

    我试过了 Random.stub :rand, 1 do ... end Kernel.stub :rand, 1 do ... end Class.stub :rand, 1 do ... end (因为当我跑步时 self.class 我跑步的地方 rand(2) 我明白了 Class ). 我也尝试过更换 兰特(2) 具有 Random.rand(2) 但这无济于事。

    那我该怎么把兰德弄出来呢?

    1 回复  |  直到 9 年前
        1
  •  7
  •   Matt Brictson    9 年前

    rand Kernel 混合到每个类中的模块。要截住它,你需要打电话 stub 在对象上,其中 兰特 正在调用。

    在示例中可能最容易看到。在以下代码中, 兰特 Coin 因为 硬币 隐式继承自 Object 内核 。因此,我需要在 例子 属于 硬币 .

    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