[ruby] Ruby Rspec : 소스에 접근자를 추가하지 않고 인스턴스 변수 테스트

다음 방법을 테스트하려고합니다.

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


답변