grimboite/articles/dev/pytest.md

1.4 KiB

PyTest

Pytest se pose comme une alternative au module unittest, dont la syntaxe est un peu plus light que le modèle basé sur JUnit.

Par exemple, on passe de

import unittest

class MyTestClass(unittest.TestCase):
    def setUp(self):
        pass

    def test_bidule_brol(self):
        self.assertEquals(1, 1)
        self.assertContains(1, [1, 2])
        ...
    
    def tearDown(self):
        pass

à

def test_equality():
    assert 1 == 1
    assert 1 in [1, 2]

On gagne donc pas mal en lisibilité et en rapidité d'écriture: il n'est pas utile de retenir toutes les fonctions d'assertion (et quand on voit la liste disponible, ce n'est pas un mal).

Pour gagner en rapidité sur certains projets, n'hésitez pas à passer directement le répertoire dans lequel les tests sont disponibles. Sans cela, on passe par un processus de découverte, qui va parcourir chaque répertoire afin de trouver quelque chose à faire.

En plus de cela, il y a pas mal de plugins, notamment pytest-cov qui permet de simuler la couverture de code pour un package en particulier. Une fois l'installation terminée, il suffit de passer --cov=package à l'exécution des tests.