Rubyにおけるモックとスタブについて
Mochaが楽しそう - LukeSilvia’s diary
スタブはただ偽装するだけ、モックは引数や呼ばれた回数等のチェックを行う。
チェック機能がほしいときにモックを使って、そうじゃなけりゃスタブを使う。
require 'test/unit' require 'rubygems' require 'mocha' class TestMock < Test::Unit::TestCase def test_stub o = stub # foo(*args) -> 2 なる偽装をするだけ o.stubs(:foo).returns(2) assert_equal 2, o.foo(9999) end def test_mock klass = Class.new do def foo(x) bar(x*2) end def bar(x) x*3 end end o = klass.new # bar(4)が呼ばれることを期待するモック o.expects(:bar).with(4) o.foo(2) end end # >> Loaded suite - # >> Started # >> .. # >> Finished in 0.00139361 seconds. # >> # >> 2 tests, 2 assertions, 0 failures, 0 errors
assert_*がひとつしかないのに「2 assertions」となっているのは、モックを作成して実際に呼ばれたときに引数のチェックをしているから、暗黙のassertionになっている。