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, но я не хочу добавлять метод доступа только для тестирования. Есть ли способ сделать это без доступа? Спасибо.
1 ответ:
можно использовать
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