模拟方法,我有一种情况或多或少这样接收块作为参数
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