Tests unitaires et pile d’appels¶
Les tests automatiques sont un complément à la déclaration des types.
que tester, quoi tester ?
- que les composants interagissent bien entre eux
- que les unités (fonctions, objets…) réagissent bien à une entrée spécifique
- que le code se comporte de la manière attendue dans des environnements différents (systèmes d’exploitation, etc…)
les types de tests :
- tests unitaires
- tests fonctionnels
- tests d’acceptation
- tests d’intégration
Quel outil utiliser ?
- la La librairie standard propose le module
unittest
et unittest2.
py.test
est le plus simple (plus simple que unittest)
def test_simple():
"test si ma_fontion renvoie bien 3"
assert ma_fontion(2) == 3
- py.test utilise assert et raises
- unittest necessite de faire sytématiquement une classe, puis assertEqual()
doctest
est plus simple mais charge trop les docstrings
À faire
écrire un test unitaire avec py.test pour la fonction suivante
- installer le paquet python-pytest
- écrire un fichier avec une fonction dedans
def double(x):
return x*2
- écrire un fichier commençant par test_ qui teste les fonctions du fichier
options utiles dans py.test¶
py.test --tb=no
py.test --tb=short
py.test -x (dernière erreur)
py.test -s (c'est comme nocapture en fait)
py.test -x --nocapture --pdb
py.test -xl --pdb
py.test -k test_simple
utiliser le module pdb
import pdb
pdb.set_trace()
depuis py.test :
import pytest
def test_function():
...
pytest.set_trace() # invoke PDB debugger and tracing
Remarquons que pdb
utilise le module cmd
, voir le module cmd et les interpréteurs qu’on a déjà vu précedemment
(Pdb) h
Documented commands (type help <topic>):
========================================
EOF bt cont enable jump pp run unt
a c continue exit l q s until
alias cl d h list quit step up
args clear debug help n r tbreak w
b commands disable ignore next restart u whatis
break condition down j p return unalias where
Miscellaneous help topics:
==========================
exec pdb
Undocumented commands:
======================
retval rv
(Pdb)
last but not least :
utiliser pylint ou pychecker
apt-get install pylint