DEV Community

Maxime Guilbert
Maxime Guilbert

Posted on • Edited on

Comment simplifier vos tests unitaires ?

Si je vous disais qu'il existait une magie qui permet de simplifier vos tests unitaires, est-ce que vous allez me croire?

Vous devriez, car c'est quelque chose qu'on va voir aujourd'hui ensemble, et cette magie s'appelle : les tests paramétrisés.


Qu'est-ce que les tests paramétrisés?

Les tests paramétrisés sont des tests unitaires auxquels on va injecter des variables en paramètre, ce qui va permettre de rejouer le même test avec un contexte différent.


Comment ça fonctionne ?

Imagineons que vous voulez tester la fonction suivante :

def is_positif_strict(num_to_test: int) -> bool:
    return num_to_test > 0
Enter fullscreen mode Exit fullscreen mode

Pour pouvoir le tester, vous deviez créer soit :

  • un ensemble de fonctions avec chacun des cas de tests
  • une fonction qui exécutait tous vos tests

On ne va pas se le cacher, la première solution est chiante et réduit la maintenabilité, la deuxième vous rend la tâche compliquée savoir quel sous test a échoué.

Maintenant, grâce à Pytest, vous pouvez juste déclarez vos tests comme suit

import pytest

testdata = [
    (-1, False),
    (0, False),
    (1, True),
]

@pytest.mark.parametrize("num_to_test, expected", testdata)
def test_is_positif_strict(num_to_test, expected):
    assert is_positif_strict() == expected
Enter fullscreen mode Exit fullscreen mode

Dans l'exemple précédent, on voit donc l'annotation @pytest.mark.parametrize être rajoutée avec deux paramètres :

  • un string contenant la liste des noms des variables à injecter
  • un tableau contenant l'ensemble des variables à injecter

En arrivant là, si vous réécriviez vos tests pour chacun des cas, vous voyez une belle amélioration et simplification de votre code.

Ceux qui pouvait déjà faire un tableau et boucler dessus dans une fonction, voici ce que ça vous apporte : de la visibilité.

En effet, contrairement au fait de faire une boucle dans votre méthode de test, chacune des injections va générer un test unitaire dédié. Du coup, si vous avez 40 cas différents à tester, ça va vous générer 40 tests unitaires dans votre compte rendu. Ce qui est très utile quand l'un de ces tests se met à échouer.

Pour ceux qui ne seraient pas encore convaincus, penser à vos méthodes contenant des regex. Ce sont toujours des méthodes pour lesquelles il y a PLEIN de cas à tester. Par conséquent, un tel outil va vous faciliter grandement la vie.


Si vous n'utilisez pas python, sachez qu'il est possible de faire la même chose en Java ou en Go. (Bien évidemment pas avec la même librairie) Donc si vous êtes intéressés par cela, vous devriez trouver comment faire assez facilement.

J'espère que ça vous aidera! 🍺


Vous voulez me supporter?

Buy Me A Coffee

Top comments (0)