Effectuer des tests automatisés avec doctest dans un notebook Jupyter

On peut réaliser des tests automatisés dans un fichier python grâce à la bibliothèque doctest. Ce court article décrit la méthode à suivre dans le cas d’un notebook Jupyter.

La bibliothèque doctest permet de détecter automatiquement les tests écrits dans la « docstring », ou chaine de documentation, de les lancer et d’afficher un rapport.
Les valeurs à tester doivent être précédées de>>>, et le résultat attendu doit être en début de ligne suivante.

Voici un exemple pour la fonction est_parfait :

def est_parfait(n) :
  '''n est un entier strictement positif
  parfait(n) vaut True si l'entier n est parfait ou False sinon.
  Un nombre parfait est tel que la somme de ses diviseurs est égale à son double.
  >>> est_parfait(2)
  False
  >>> est_parfait(6)
  True
  >>> est_parfait(27)
  False
  >>> est_parfait(28)
  True'''

  assert(n>0 and type(n)==int), "l'argument doit être un entier strictement positif"
  diviseurs = [i for i in range(1,n+1) if n%i == 0]
  return sum(diviseurs) == 2*n

On exécute dans une cellule du notebook les instructions suivantes :

import doctest
doctest.testmod()

et un rapport concis des tests est affiché (attention, les tests sont lancés sur l’ensemble du notebook) :
TestResults(failed=0, attempted=4)
ce qui signifie ici que les 4 tests n’ont donné lieu à aucun échec.

On peut ajouter l’argument verbose=True en écrivant doctest.testmod(verbose=True) : le rapport produit est alors plus explicite.

Trying:
   est_parfait(2)
Expecting:
   False
ok
Trying:
   est_parfait(6)
Expecting:
   True
ok
Trying:
   est_parfait(27)
Expecting:
   False
ok
Trying:
   est_parfait(28)
Expecting:
   True
ok
1 items had no tests:
   __main__
1 items passed all tests:
  4 tests in __main__.est_parfait
4 tests in 2 items.
4 passed and 0 failed.
Test passed.
TestResults(failed=0, attempted=4)

Partager

Imprimer cette page (impression du contenu de la page)