1

脳と直接やり取りするのは簡単ではないので、いくつかの依存関係の反転を使用して、ゲートウェイ パターンを少し使用しています。

NumberCruncherBrain私のクラスのラッパーです。

class NumberCruncher

  def initialize brain = Brain.new
    @brain = brain    
  end

  def times_one_hundred *numbers
    numbers.map &@brain.method(:multiply_by_100)
  end

end

ただし、テスト時にエラーが発生します。

NameError: クラス `Mocha::Mock' の未定義のメソッド `multiply_by_100'

これがテストです

class NumberCruncherTest

  def setup
    @brain = mock
    @cruncher = NumberCruncher.new @brain
  end

  def test_times_one_hundred
    @brain.expects(:multiply_by_100).with(1).returns(100)
    @brain.expects(:multiply_by_100).with(2).returns(200)
    @brain.expects(:multiply_by_100).with(3).returns(300)

    assert_equal [100, 200, 300], @cruncher.times_one_hundred(1,2,3)
  end

end

私はそれが&@brain.method(:multiply_by_100)コールとモカがmethod_missing何かを使用して動作するためだと仮定しています。唯一の解決策は、セットアップを変更することのようです

class NumberCruncherTest

  class FakeBrain
    def multiply_by_100; end
  end

  def setup
    @brain = FakeBrain.new
    @cruncher = NumberCruncher.new @brain
  end

  # ...
end

しかし、私はこの解決策がひどいと思います。ぐちゃぐちゃになりFake*、テスト全体に大量のクラスが配置されます。モカでこれを行うより良い方法はありますか?

4

1 に答える 1