2012-10-25 6 views
8

Ich habe eine Klasse, die die folgende Initialisierungsmethode hat.Füllen von Instanzvariablen in rspec Tests

def initialize(my_var) 
    @my_var = my_var 
end 

und ich möchte die Methode testen, die dann etwas zu @my_var tut

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

wie kann ich @my_var ändern, bevor die Prüfung, dass es richtig ein Array zurückgibt?

Ist dies ohne einen Accessor für @my_var möglich?

Antwort

25

Das klingt nicht wie eine korrekte Praxis. Rspec sollte das Interface-Verhalten Ihrer Klassen und Modelle testen - nicht die interne Implementierung (von welcher Instanz Variablen zweifellos sind). Es gibt Möglichkeiten, dies zu tun, aber sind Sie sicher, dass Sie keinen Accessor für diese Variable haben möchten?

In jedem Fall können Sie my_object.instance_variable_get("@my_var") und my_object.instance_variable_set("@my_var", value) verwenden, um die Variable zu manipulieren.

+1

Der Grund, warum ich das tue, ist, dass meine Initialisierungsmethode das Lesen von Datei ist, was ich versuche, stub 'File' zu ​​schreiben und die erwarteten verarbeiteten Daten aus dieser Datei zu schreiben, ohne eine Datei zur Unterstützung meiner Tests zu benötigen. Ich kann dann diese Initialisierungsmethode überspringen, um andere Methoden in meiner Klasse zu testen. –

+1

@JosephLeBrech, Sie können auch versuchen, StringIO anstelle von Datei zu verwenden – faron