web-dev-qa-db-fra.com

Écrire des tests unitaires en Python: comment commencer?

J'ai terminé mon premier projet dans Python et ma tâche consiste maintenant à rédiger des tests.

Comme c’est la première fois que j’ai fait un projet, c’est la première fois que j’écris des tests.

La question est, comment je commence? Je n'ai absolument aucune idée. Quelqu'un peut-il m'indiquer une documentation/un tutoriel/un lien/un livre que je peux utiliser pour commencer à écrire des tests (et je suppose que les tests unitaires en particulier)

Tout conseil sera le bienvenu sur ce sujet.

517
user225312

Si vous débutez avec unittests, l'approche la plus simple à apprendre est souvent la meilleure. Sur cette base, je recommande d'utiliser py.test plutôt que le module par défaut unittest .

Considérez ces deux exemples, qui font la même chose:

Exemple 1 (unittest):

_import unittest

class LearningCase(unittest.TestCase):
    def test_starting_out(self):
        self.assertEqual(1, 1)

def main():
    unittest.main()

if __== "__main__":
    main()
_

Exemple 2 (pytest):

_def test_starting_out():
    assert 1 == 1
_

En supposant que les deux fichiers s'appellent _test_unittesting.py_, comment exécutons-nous les tests?

Exemple 1 (unittest):

_cd /path/to/dir/
python test_unittesting.py
_

Exemple 2 (pytest):

_cd /path/to/dir/
py.test
_
98
Tim McNamara

Le livre gratuit Python Dive Into Python contient un chapitre sur les tests unitaires que vous pourriez trouver utile.

Si vous suivez les pratiques modernes, vous devriez probablement écrire les tests pendant que vous écrivez votre projet et ne pas attendre que votre projet soit presque terminé.

Peu en retard maintenant, mais maintenant vous savez pour la prochaine fois. :)

70
Mark Byers

Il existe, à mon avis, trois grands python cadres de test qu'il est bon de consulter.
nittest - le module est livré en standard avec toutes les distributions python
nez - peut effectuer des tests moins rigoureux et comporte moins de passe-passe.
pytest - effectue également des tests très rigoureux, a moins de contraste, de meilleurs rapports, de nombreuses autres fonctionnalités intéressantes

Pour obtenir une bonne comparaison de tous ceux-ci, lisez les introductions de chacun à l’adresse suivante à http://pythontesting.net/start-here .
Il existe également de nombreux articles sur les appareils et plus encore.

38
Okken

La documentation pour nittest serait un bon point de départ.

En outre, il est un peu tard maintenant, mais à l'avenir, envisagez d'écrire des tests unitaires avant ou pendant le projet lui-même. De cette façon, vous pouvez les utiliser pour tester au fur et à mesure, et (en théorie), vous pouvez les utiliser comme tests de régression pour vérifier que vos modifications de code n'ont pas cassé de code existant. Cela vous donnerait tous les avantages d'écrire des cas de test :)

34
Justin Ethier

unittest est livré avec la bibliothèque standard, mais je vous recommanderais nosetests.

" le nez se rallonge sans effort pour faciliter les tests. "

Je vous recommanderais également pylint

" analyse Python code source à la recherche de bugs et de signes de mauvaise qualité. "

27
ssoler

Comme d'autres l'ont déjà répondu, il est tard pour écrire des tests unitaires, mais pas trop tard. La question est de savoir si votre code est testable ou non. En effet, il n'est pas facile de tester le code existant, il existe même un livre à ce sujet: Travailler efficacement avec du code hérité (voir points clés ou PDF précurseur ).

Vous devez maintenant écrire les tests unitaires ou non. Vous devez juste être conscient que cela pourrait être une tâche fastidieuse. Vous pourriez vous y attaquer pour apprendre les tests unitaires ou envisager d'écrire les tests d'acceptation (de bout en bout) en premier, puis commencer à écrire des tests unitaires lorsque vous modifierez le code ou ajouterez une nouvelle fonctionnalité au projet.

8
philant

nosetests est une solution brillante pour les tests unitaires en python. Il supporte à la fois les cas de test et les doctests basés sur unittest et vous permet de démarrer avec un simple fichier de configuration.

3
Daniel Kluev