2012-10-25 8 views
8

Ho una classe che ha il seguente metodo di inizializzazione.Popolazione di variabili di istanza nei test rspec

def initialize(my_var) 
    @my_var = my_var 
end 

e voglio provare il metodo che poi fa qualcosa di @my_var

def split 
    @my_var.split(",") 
end 

come faccio a cambiare @my_var prima del test che restituisce un array correttamente?

Ciò è possibile senza disporre di un accessorio per @my_var?

risposta

25

Questo non suona come una pratica corretta. Rspec dovrebbe testare il comportamento dell'interfaccia delle classi e dei modelli, non l'implementazione interna (di cui le variabili di istanza sono indubbiamente). Ci sono modi per farlo, ma sei sicuro di non voler avere un accesso per quella variabile?

In ogni caso, è possibile utilizzare my_object.instance_variable_get("@my_var") e my_object.instance_variable_set("@my_var", value) per modificare la variabile.

+1

la ragione per cui sto facendo questo è che il mio metodo di inizializzazione sta leggendo da file, quello che sto cercando di fare è stub 'File' e scrivere i dati elaborati attesi da quel file senza bisogno di un file per supportare i miei test. Posso quindi saltare quel metodo di inizializzazione per testare qualsiasi altro metodo nella mia classe. –

+1

@JosephLeBrech, puoi anche provare a utilizzare StringIO invece del file – faron