【发布时间】:2013-07-15 21:19:01
【问题描述】:
直接与大脑交互并不容易,所以我使用了一个小网关模式和一些依赖倒置。
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) 调用和 mocha 通过使用 method_missing 或其他东西起作用。唯一的解决方案似乎是更改设置
class NumberCruncherTest
class FakeBrain
def multiply_by_100; end
end
def setup
@brain = FakeBrain.new
@cruncher = NumberCruncher.new @brain
end
# ...
end
但是,我认为这种解决方案有点糟糕。它很快就变得一团糟,并且在我的测试中放置了大量的Fake* 类。有没有更好的方法来用 mocha 做到这一点?
【问题讨论】:
-
你试过
@brain.expects(:method).with(:multiply_by_100)...吗?
标签: ruby mocking ruby-mocha