ruby Rspec : Testing instance variables without adding an accessor to source

标签 ruby rspec instance-variables

我正在尝试测试以下方法:

def unprocess_move(board, move)
  if move[0].instance_of?(Array)
    multi_move = @multi_move.pop(2).reverse
    multi_move.each do |single_move|
      unapply_move(board, single_move)
    end
  else
    board = unapply_move(board, move)
  end
  board
end

我想为@multi_move 设置状态,但我不想添加仅用于测试的访问器。有没有办法在没有访问器的情况下这样做?谢谢。

最佳答案

您可以使用 Object#instance_variable_get方法来获取对象的任何实例变量的值:

class Foo 
  def initialize
    @foo = 5 # no accessor for that variable
  end 
end

foo = Foo.new
puts foo.instance_variable_get(:@foo)
#=> 5

Object#instance_variable_set可用于设置实例变量值:

foo.instance_variable_set(:@foo, 12) 
puts foo.instance_variable_get(:@foo)
#=> 12

关于 ruby Rspec : Testing instance variables without adding an accessor to source,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364157/

相关文章:

ios - 如何释放通过dispatch_once创建的实例对象

ruby-on-rails - RVM 安装 Rubies 失败

ruby-on-rails - 如何从 RSpec View 规范测试页面的标题?

ruby-on-rails - 我可以在 :all with capybara? 之前使用吗

ruby-on-rails - RSpec 无法在模块内找到类

ruby - 将实例变量及其值转换为散列

ruby http请求post方法

ruby - Ruby中 "each"循环的动态变化

ruby - 为什么要在框架 Web 服务器前面使用 http 服务器?

java - 访问实例字段比声明局部变量花费更长的时间?