2012-04-02 9 views
0

Sagen wir, ich habe eine Methode, die direkt eine Instanzvariable verweist:Stub eine Instanzvariable Mokka mit

class MyClass 
    def method1 
    puts @instance_var 
    end 
end 

Wie kann ich den Wert von @instance_varmocha in einem Test::Unit Test mit Stub?

Antwort

-1

Sie können nicht. Das ist einer der vielen Gründe, warum Sie niemals direkt auf Ivars zugreifen sollten.

+1

Pflege um zu erarbeiten? http://stackoverflow.com/questions/9981614/is-it-bad-form-to-use-instance-vars-directly-in-ruby – m33lky

+1

OO ist über das Senden von Nachrichten. Der Zugriff auf einen ivar ist keine Nachricht senden, daher ist es nicht OO. Ruby ist eine objektorientierte Sprache, daher ist es sinnvoll, nach einem objektorientierten Design zu streben, also nicht auf Ivars zuzugreifen. Oder, um mit einer anderen Definition von OO zu gehen: Was unterscheidet OOP von ADT-orientierten Programmierung ist Repräsentation Unabhängigkeit und insbesondere die Fähigkeit, mehrere Darstellungen zu unterstützen. Der Zugriff auf Ivars bricht sowohl die Repräsentationsunabhängigkeit als auch die Mehrfachrepräsentation. Darüber hinaus bricht es auch die Vererbung, da Sie keine Ivars überschreiben können, sondern nur Methoden. –

+0

Ich denke du sprichst von Original OOP. Die moderne Definition von OOP ist davon abgekommen. Ich bin mir nicht sicher, was Sie damit meinen, dass ich die Ivars nicht überschreiben kann. Ruby ist eine dynamisch typisierte Sprache, kann kein Kindobjekt etwas in den Ivar legen? Ich habe hier einen konkreten Fall. Ich habe nicht vor, dass die Außenwelt auf diesen speziellen Ivar zugreifen soll. – m33lky