75 votes

Ruby Rspec: Test de variables d'instance sans ajouter d'accesseur à la source

J'essaie de tester la méthode suivante:

 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
 

où je veux définir l'état pour @multi_move, mais je ne veux pas ajouter un accesseur juste pour le test. Y at-il un moyen de le faire sans l'accesseur? Merci.

126voto

KL-7 Points 14154

Vous pouvez utiliser la méthode Object#instance_variable_get pour obtenir la valeur de toute variable d'instance de l'objet comme celle-ci:

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

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

Et Object#instance_variable_set peuvent être utilisés pour définir les valeurs des variables d'instance:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X