2012-02-20 6 views
58

sto cercando di testare il seguente metodo:Rubino Rspec: Testare le variabili di istanza senza l'aggiunta di una funzione di accesso alla fonte

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 

dove voglio impostare lo stato per @multi_move, ma io non voglio aggiungi un accessorio per il test. C'è un modo per farlo senza l'accessorio? Grazie.

risposta

104

È possibile utilizzare Object#instance_variable_get metodo per ottenere il valore di qualsiasi variabile dell'oggetto come tale istanza:

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

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

E Object#instance_variable_set possono essere utilizzati per impostare esempio i valori delle variabili:

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

ma ho bisogno di impostalo in anticipo nel mio test. Non ha un valore prima di testarlo. –

+1

@steve_gallagher, dai un'occhiata ai documenti. C'è 'instance_variable_set' proprio accanto a 'instance_variable_get' (esempio aggiunto e link ai documenti alla risposta). –

+0

Interessante. Non sapevo che avresti potuto entrare e impostare e ottenere qualsiasi variabile di istanza in quel modo. Ho visto un sacco di test RSpec, però, e non ho mai visto quei metodi chiamati. Sembra un modo non standard di gestire quello che penserei sarebbe una situazione piuttosto tipica. Non mi lamento, però, grazie per la risposta. –

Problemi correlati