2010-07-15 13 views
5

के रूप में एक ब्लॉक प्राप्त करता है मुझे लगता है मैं इकाई परीक्षण वर्ग एक हूँ और अधिक या कम इसनकली तरीकों कि पैरामीटर

class A 
    def initialize(&block) 
    b = B.new(&block) 
    end 
end 

की तरह एक परिदृश्य है और मैं अगर B नई # A # करने के लिए पारित कर दिया ब्लॉक प्राप्त है जानना चाहता हूँ नया। मैं मोचा फ्रेमवर्क के रूप में मोचा का उपयोग कर रहा हूँ।

क्या यह संभव है?

उत्तर

0

मुझे लगता है कि आप चाहते हैं:

l = lambda {} 
B.expects(:new).with(l) 
A.new(&l) 

मैं इस RSpec के साथ काम करता पता है, मैं अगर मोचा

+0

काम नहीं किया। मुझे विश्वास है कि मैं इस तरह से ऐसा नहीं कर सकता। मैं यहां एक और दृष्टिकोण की कोशिश करूंगा। धन्यवाद! :) – rafaelss

2

प्रबंधन नहीं करती है आश्चर्य होगा मैं दोनों मोचा और 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 
0

है B::new ब्लॉक को उपज और ब्लॉक का कोई पैरामीटर कि 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 
संबंधित मुद्दे