Comment tester une méthode privée en Ruby

Les tests unitaires, c’est nécessaire. Mais jusqu’où faut-il aller ?
Voici ce que je pense du test des méthodes privées :

  1. Tester toutes les méthodes privées serait, au mieux, une énorme perte de temps.
  2. Tester une méthode privée par ci, par là peut vraiment simplifier la vie.

Alors, comment faire ? Avec Ruby il y a plusieurs solutions. La seule dont je me sert a été trouvé sur le blog de Jason Rudolph.
Je vous livre ci-dessous une traduction française, plus quelques brèves explications pour les débutants.

Note : j’ai aussi traduit le code, pour que cela ai du sens en français.

Pour démontrer le test d’une méthode privée, partons de la classe suivante :

class Ninja
  private
    def tuer(nombre_de_victimes)
      "#{nombre_de_victimes} victimes."
    end
end

Comment pouvons nous être sûr que la méthode privée tuer() fasse bien ce que nous voulons ? Et ceci en la testant isolément.

Note : un principe du test unitaire est de tester une méthode pour ce qu’elle est, c’est à dire qu’il faut éviter d’utiliser d’autres méthodes, elles-mêmes testées ailleurs, dans le test d’une méthode. Ouf, vous me suivez ?

Pourquoi ne pas définir temporairement une nouvelle méthode publique, qui appellerait tout simplement notre méthode privée ?

require 'test/unit'

class NinjaTest < Test::Unit::TestCase
  def test_punir_les_developpeurs_negligeants
    @ninja = Ninja.new
    def @ninja.fouetter_en_place_publique(*args)
      tuer(*args)
    end
    assert_equal '3 victimes.', @ninja.fouetter_en_place_publique(3)
  end
end

Et voilà !

Note : cette solution utilise le fait qu’en Ruby, vous pouvez ajouter des nouvelles méthodes aux objets déjà crées. Vous voyez qu’ici, on a ajouté la méthode fouetter_en_place_publique() à l’objet @ninja.

Publicités

, , , , , ,

  1. Poster un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :