• 4 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours est en vidéo.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Mis à jour le 07/10/2017

Codez votre premier test

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

 

Commençons par tester qu'un  Agent  peut bien avoir un attribut  position .

Comment allons-nous coder ce test ? Python intègre une fonctionnalité qui, selon moi, est grandiose : les doctests.

Peut-être êtes-vous déjà familier·e avec les Docstrings ? Si vous parcourez le code du projet exemple, vous verrez à de nombreuses reprises trois guillemets, une phrase puis de nouveau trois guillemets. Comme ceci :

class BaseGraph:
    ...
    def xy_values(self, zones):
        """
        Returns:
            x_values
            y_values
        """

Les docstrings sont très similaires aux commentaires mais ils sont sur plusieurs lignes. Ils servent à documenter du code, autrement dit à expliquer ce qui est attendu.

Pourquoi vous parler des Docstrings dans un cours sur les tests ? Car vous pouvez les utiliser pour exécuter des tests à l'intérieur. Cela porte le petit nom de Doctests.

Doctests

Un Doctest reprend la présentation d'un terminal. Ajoutez trois chevrons au début d'une ligne pour imiter un terminal puis le résultat attendu juste en dessous. Je vous montre !

"""
>>> agent = Agent(30)
>>> agent.position
30
"""

Que fait-on ?

Nous commençons par créer une nouvelle instance de la classe Agent. Puis nous exécutons l'instruction  agent.position  , exactement comme si nous étions dans un terminal. Enfin, nous indiquons à la ligne la réponse attendue :  30 .

Comment lancer le test ? En utilisant la commande suivante dans votre terminal :

python -m doctest program/world.py

Et voilà ! Tout est prêt !

Rien n'apparait ? C'est normal ! Nous devons lui indiquer de nous parler.  :)

Pour cela, ajoutons  -v  à la fin :

python -m doctest -v program/world.py

Parfait ! Les tests sont bien exécutés et Doctest a même l'intelligence de nous signaler toutes les méthodes qui n'ont pas de test !

Nous pouvons aller plus loin en ajoutant des attributs à notre agent et en les testant également :

"""
>>> agent = Agent(30, age=84, agreeableness=42)
>>> agent.position
30
>>> agent.age
84
>>> agent.agreeableness
42
"""

Les Doctests sont très utiles en tant que documentation. Ils fournissent un exemple concret de la manière dont le programme est censé fonctionner.

Pour ma part, je suis assez contente mais j'aimerais avoir un document dans lequel je pourrais lire uniquement mes tests. C'est pourquoi je vous propose de créer un nouveau fichier.

Un fichier de tests

Créez un nouveau fichier dans le dossier parent des scripts, au même niveau que le  Readme . Cela nous permettra de différencier le code source et les fichiers de test.

touch tests.py

A l'intérieur nous allons simplement écrire, en commentaire, les différents tests que nous ferons.

_tests.py_

# - Agent : 
#   - modifier un attribut position
#   - récupérer un attribut position
#   - assigner un dictionnaire en tant qu'attributs

# - Position :
#   - modifier un attribut longitude_degrees
#   - modifier un attribut latitude_degrees
#   - modifier un attribut longitude_degrees avec une valeur supérieure à 180 renvoie une erreur. 
#   - modifier un attribut latitude_degrees avec une valeur supérieure à 90 renvoie une erreur. 
#   - récupérer une latitude
#   - récupérer une longitude

# - Zone :
#   - trouver une zone qui contient une position
#   - ajouter un habitant dans une zone
#   - récupérer toutes les instances Zone (Zone.ZONES)
#   - récupérer la densité de population d'une zone
#   - récupérer l'agréabilité moyenne d'une zone

# - AgreeablenessGraph :
#   - récupérer un titre
#   - récupérer x_label
#   - récupérer y_label
#   - récupérer xy_values sous forme de tuples
#   - la première valeur de xy_values est la densité de population moyenne
#   - la seconde valeur de xy_values est l'agréabilité moyenne

# - IncomeGraph :
#   - récupérer un titre
#   - récupérer x_label
#   - récupérer y_label
#   - récupérer xy_values sous forme de tuples
#   - la première valeur de xy_values est l'âge
#   - la seconde valeur de xy_values est le revenu

A présent, comment créer des tests ?

Vous ne pourrez pas utiliser les Doctests ici car ils sont pensés pour s'intégrer dans un script. Il nous faudra utiliser une librairie de tests qui nous donnera un environnement complet pour bien débuter.

Les librairies de tests

Plusieurs librairies de tests existent, dont Unittest qui est la librairie par défaut de Python. Dans ce cours nous utiliserons Pytest, une autre librairie très appréciée.

Pytest vous permet d'écrire des tests extrêmement lisibles et intègre de nombreux outils qui vous rendront la vie plus facile. A tout de suite pour les découvrir !

 

A vous de jouer !

Cliquez sur ce lien

 

Code de ce chapitre

Retrouvez le code de ce chapitre sur Github en cliquant ici

Exemple de certificat de réussite
Exemple de certificat de réussite