1. ホーム
  2. ruby

[解決済み] RubyのRspec。ソースにアクセッサを追加せずにインスタンス変数をテストする

2023-05-13 15:40:11

質問

以下のメソッドをテストしようとしています。

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