Ruby 使用mocha存根实例变量

Ruby 使用mocha存根实例变量,ruby,unit-testing,stub,testunit,Ruby,Unit Testing,Stub,Testunit,假设我有一个直接引用实例变量的方法: class MyClass def method1 puts @instance_var end end 如何在Test::Unit测试中使用mocha剔除@instance\u var的值?您不能。这是您不应该直接访问IVAR的众多原因之一。尽管直接从单元测试访问对象的实例变量不是最佳做法,但如果您有充分的理由这样做,您可以使用: 想详细说明一下吗?OO是关于消息发送的。访问ivar不是消息发送,因此它不是OO。Ruby是一种面向对象的语

假设我有一个直接引用实例变量的方法:

class MyClass
  def method1
    puts @instance_var
  end
end

如何在
Test::Unit
测试中使用
mocha
剔除
@instance\u var
的值?

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

尽管直接从单元测试访问对象的实例变量不是最佳做法,但如果您有充分的理由这样做,您可以使用:


想详细说明一下吗?OO是关于消息发送的。访问ivar不是消息发送,因此它不是OO。Ruby是一种面向对象的语言,因此努力实现面向对象的设计是有意义的,因为不需要访问IVAR。或者,使用不同的OO定义:OOP与面向ADT编程的区别在于表示独立性,特别是支持多种表示的能力。访问IVAR会破坏表示独立性和多个表示。除此之外,它还破坏了继承,因为您不能覆盖IVAR,只能覆盖方法。我想您谈论的是原始的OOP。OOP的现代定义已经不再是这样了。不确定不能覆盖IVAR是什么意思。Ruby是一种动态类型化语言,子对象不能将任何内容放入ivar吗?我这里有一个具体的案例。我不想让外部世界进入那个特别的ivar。
my_instance = MyClass.new
my_instance.instance_variable_set(:@instance_var, 'My updated value')