2012-02-20 10 views
58

मैं निम्न विधि का परीक्षण करने के लिए कोशिश कर रहा हूँ एक्सेसर जोड़े बिना उदाहरण चर का परीक्षण:रूबी Rspec: स्रोत

def unprocess_move(board, move) 
    if move[0].instance_of?(Array) 
    multi_move = @multi_move.pop(2).reverse 
    multi_move.each do |single_move| 
     unapply_move(board, single_move) 
    end 
    else 
    board = unapply_move(board, move) 
    end 
    board 
end 

जहाँ मैं @multi_move के लिए राज्य स्थापित करना चाहते हैं, लेकिन मैं नहीं करना चाहते परीक्षण के लिए केवल एक एक्सेसर जोड़ें। क्या एक्सेसर के बिना ऐसा करने का कोई तरीका है? धन्यवाद।

उत्तर

104

आप ऐसे ही वस्तु के किसी भी मामले चर का मान प्राप्त करने के लिए Object#instance_variable_get विधि का उपयोग कर सकते हैं:

class Foo 
    def initialize 
    @foo = 5 # no accessor for that variable 
    end 
end 

foo = Foo.new 
puts foo.instance_variable_get(:@foo) 
#=> 5 

और Object#instance_variable_set उदाहरण चर मान सेट करने के लिए इस्तेमाल किया जा सकता:

foo.instance_variable_set(:@foo, 12) 
puts foo.instance_variable_get(:@foo) 
#=> 12 
+0

लेकिन मैं करने की जरूरत है इसे अपने परीक्षण के भीतर पहले से सेट करें। परीक्षण करने से पहले इसका कोई मूल्य नहीं है। –

+1

@steve_gallagher, दस्तावेज़ों पर एक नज़र डालें। 'Instance_variable_set' 'example_variable_get' के बगल में है (जोड़ा गया उदाहरण और उत्तर में दस्तावेज़ों के लिंक)। –

+0

दिलचस्प। मुझे नहीं पता था कि आप बस सही तरीके से जा सकते हैं और सेट कर सकते हैं और इस तरह के किसी भी आवृत्ति चर प्राप्त कर सकते हैं। मैंने आरएसपीसी परीक्षण के बहुत सारे को देखा है, और मैंने कभी उन तरीकों को नहीं देखा है। ऐसा लगता है कि मुझे लगता है कि एक सुंदर ठेठ स्थिति क्या होगा, इसे संभालने के एक गैर-मानक तरीके की तरह लगता है। मैं शिकायत नहीं कर रहा हूं, हालांकि, उत्तर के लिए धन्यवाद। –