我试图测试以下方法:

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相关问答推荐

如何在 Ruby 中为链表实现#pop

为什么我的二维 Ruby 数组的多个值会发生变化,尽管只更改了其中一个?

Ruby中带和不带下划线_的方法参数有什么区别

在 Ruby 中使用委托维护相同的类

如何使用正则表达式在字符串中查找特定匹配项

确保 Capybara 不存在元素

由模块中定义的另一个覆盖方法

`expect`测试中的Rspec`eq`与`eql`

如何使用 yardoc 列出未记录的模块/类/常量/方法?

用mustache迭代数组

RSpec: stubbing Kernel::sleep?

如何在Ruby中返回两个字符串之间的字符串的子字符串?

不区分大小写的数组#include?

在现有 Jekyll 安装中切换主题

删除/取消定义类方法

如何在 Mac OS X Lion 中安装 Ruby 1.9.3?

如何在Ruby中获取给定月份的天数,占年份?

了解 Ruby 的加载路径

为什么在 ruby​​ 中动态创建大量符号不是一个好主意(对于 2.2 之前的版本)?

如何重命名 gemset?