模擬方法,我有一種情況或多或少這樣接收塊作爲參數
class A
def initialize(&block)
b = B.new(&block)
end
end
我的單元測試A級,我想知道,如果B#新的接收傳遞到A#塊新。我正在使用Mocha作爲模擬框架。
可能嗎?
模擬方法,我有一種情況或多或少這樣接收塊作爲參數
class A
def initialize(&block)
b = B.new(&block)
end
end
我的單元測試A級,我想知道,如果B#新的接收傳遞到A#塊新。我正在使用Mocha作爲模擬框架。
可能嗎?
我想你想:
l = lambda {}
B.expects(:new).with(l)
A.new(&l)
我知道這個工程使用RSpec,我會感到驚訝,如果摩卡不處理
我試圖與這兩個摩卡和RSpec,雖然我可以通過測試,行爲是不正確的。從我的實驗中,我得出結論認爲塊已通過是不可能的。
問題:爲什麼要傳遞一個塊作爲參數?該區塊的用途是什麼?什麼時候該被叫?
class BlockParamTest < Test::Unit::TestCase
def test_block_passed_during_initialization_works_like_a_champ
l = lambda {|name| puts "Hello #{name}"}
l.expects(:call).with("Bryan")
A.new(&l)
end
end
是B::new
屈服於塊和不塊修改PARAM是yield
提供:
也許這是真正的問題,您應該有類似的測試?如果是的話,那麼你可以這樣測試:
require 'minitest/autorun'
require 'mocha/setup'
describe 'A' do
describe '::new' do
it 'passes the block to B' do
params = {}
block = lambda {|p| p[:key] = :value }
B.expects(:new).yields(params)
A.new(&block)
params[:key].must_equal :value
end
end
end
沒有工作。我開始相信我不能這樣做。我會在這裏嘗試另一種方法。謝謝! :) – rafaelss 2010-07-15 17:08:46