2012-04-02 61 views
0

一个实例变量,比方说,我有一个直接引用实例变量的方法:存根采用摩卡

class MyClass 
    def method1 
    puts @instance_var 
    end 
end 

我怎样才能存根出在Test::Unit测试使用mocha的的@instance_var价值?

回答

-1

你不能。这是你不应该直接访问ivars的众多原因之一。

+1

谨慎阐述? http://stackoverflow.com/questions/9981614/is-it-bad-form-to-use-instance-vars-directly-in-ruby – m33lky 2012-04-02 18:18:36

+1

面向对象是关于消息发送。访问伊娃不是一个消息发送,因此它不是面向对象。 Ruby是一种面向对象的语言,所以争取面向对象的设计是非常有意义的,不要访问ivars。或者,按照OO的不同定义:OOP与面向ADT的编程的区别在于表示独立性,特别是支持多重表示的能力。访问ivars打破了表示独立性和多重表示。除此之外,它还会中断继承,因为您无法覆盖ivars,只能使用方法。 – 2012-04-02 23:59:03

+0

我认为你在谈论原始OOP。 OOP的现代定义已经消失。不知道你的意思是不能覆盖ivars。 Ruby是一种动态类型语言,不能将子对象放入ivar中?我在这里有一个具体的案例。我不打算外面的世界来访问那个特定的伊娃。 – m33lky 2012-04-03 03:51:36