【问题标题】:stub an instance variable using mocha使用 mocha 存根实例变量
【发布时间】:2012-04-02 05:12:53
【问题描述】:

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

class MyClass
  def method1
    puts @instance_var
  end
end

如何在Test::Unit 测试中使用mocha@instance_var 的值存根?

【问题讨论】:

    标签: ruby unit-testing stub testunit


    【解决方案1】:

    虽然直接从单元测试访问对象的实例变量不被认为是最佳实践,但如果您有充分的理由这样做,您可以使用instance_variable_set

    my_instance = MyClass.new
    my_instance.instance_variable_set(:@instance_var, 'My updated value')
    

    【讨论】:

      【解决方案2】:

      你不能。这就是为什么你永远不应该直接访问 ivars 的众多原因之一。

      【讨论】:

      • 想详细说明一下? stackoverflow.com/questions/9981614/…
      • OO 是关于消息发送的。访问 ivar 不是消息发送,因此它不是 OO。 Ruby 是一种面向对象的语言,因此努力实现面向对象的设计是有意义的,因此不访问 ivars。或者,按照 OO 的不同定义:OOP 与面向 ADT 编程的区别在于表示独立性,特别是支持多种表示的能力。访问 ivars 会破坏表示独立性和多重表示。除此之外,它还会破坏继承,因为您不能覆盖 ivars,只能覆盖方法。
      • 我认为您在谈论原始 OOP。 OOP 的现代定义已经偏离了这一点。不确定您无法覆盖 ivars 是什么意思。 Ruby 是一种动态类型语言,子对象不能将任何内容放入 ivar 中吗?我这里有一个具体案例。我不打算让外界访问那个特定的 ivar。
      猜你喜欢
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 2011-08-29
      • 1970-01-01
      相关资源
      最近更新 更多