脳と直接やり取りするのは簡単ではないので、いくつかの依存関係の反転を使用して、ゲートウェイ パターンを少し使用しています。
NumberCruncher
Brain
私のクラスのラッパーです。
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*
、テスト全体に大量のクラスが配置されます。モカでこれを行うより良い方法はありますか?