Carlos Brando

Nome do Jogo

Como testar um método privado?

148963020_54c3f1b723.jpg

Vi esta dica no blog do Jason Rudolph, mas ele mesmo ouvi isto do Evan Phoenix no RubyConf no ano passado. Durante uma discussão sobre como testar isoladamente métodos privados, Evan chegou com a seguinte idéia, veja o método

class Ninja
  private
  def kill(num_victims)
    "#{num_victims} victims are no longer with us."
  end
end

Ok, agora como testar isto? A sugestão foi definir um novo método público na classe, que chamará o método privado. Tudo isto na classe de teste. Veja como:

class NinjaTest < Test::Unit::TestCase
  def test_should_punish_sloppy_coders
    @ninja = Ninja.new
    def @ninja.flog_publicly(*args)
      kill(*args)
    end
    assert_equal ‘3 victims are no longer with us.’, @ninja.flog_publicly(3)
  end
end

Entendeu? Criamos um novo método público chamado flog_publicly e o inserimos na instancia de ninja, este método por sua vez, chama nosso método privado.

Comments