[wiki: Tests]
#!comment
A REGARDER DE PRES :
http://pytest.org/latest/
http://sametmax.com/un-gros-guide-bien-gras-sur-les-tests-unitaires-en-python-partie-1/
http://sametmax.com/un-gros-guide-bien-gras-sur-les-tests-unitaires-en-python-partie-2/
http://sametmax.com/un-gros-guide-bien-gras-sur-les-tests-unitaires-en-python-partie-3/
Tester un module
Une pratique courante consiste à placer en fin de module des instructions de test, à la suite d’une instruction if name == "main": . En effet, si le module est importé, name contient le nom du module et les instructions ne sont pas exécutées. Par contre, si le module est exécuté en tant que programme principal, name est bien égal à main, et les tests sont exécutés.
Exemple :
#!python
def minmax(test,*args):
res = args[0]
for arg in args[1:]
if test(arg, res):
res = arg
return res
def lessthan(x,y): return x < y
def grtrthan(x,y): return x > y
if name == "main":
print minmax(lessthan,4,2,1,5,6,3)
print minmax(grtrthan,4,2,1,5,6,3)
doctest
Le module doctest recherche des morceaux de texte ressembant à des sessions interactives, et les exécute pour s’assurer que le résultat affiché est conforme aux attentes.
Exemple :
#!python
def minmax(test,*args):
res = args[0]
for arg in args[1:]:
if test(arg, res):
res = arg
return res
def lessthan(x,y):
"""
>>> minmax(lessthan,4,2,1,5,6,3)
1
"""
return x < y
def grtrthan(x,y):
"""
>>> minmax(grtrthan,4,2,1,5,6,3)
6
"""
return x > y
Pour exécuter les tests :
python -m doctest -v <monfichier>
!PyUnit
Etapes standards :
1. Définir une classe héritant de unittest.TestCase.
2. Y définir des méthodes dont le nom commence par test_.
3. Placer un appel à unittest.main() dans le fichier à tester, généralement à la fin.
Exemple :
#!python
import unittest
def minmax(test,*args):
res = args[0]
for arg in args[1:]
if test(arg, res):
res = arg
return res
def lessthan(x,y): return x < y
def grtrthan(x,y): return x > y
class TestMinMax(unittest.TestCase):
def setUp(self):
pass
def test_lessthan(self):
self.assertEqual( minmax(lessthan,4,2,1,5,6,3), 1)
def test_grtrthan(self):
self.assertEqual( minmax(grtrthan,4,2,1,5,6,3), 6)
if name == 'main':
unittest.main()
Nose
#!comment
A mature, programmable text editor that you can learn once for all your
text editing needs, and that already has excellent Python support, like
GNU Emacs or Vim.
A refactoring tool that works with your editor, like ‘bicyclerepair’
<URL:http://bicyclerepair.sourceforge.net/> or ‘rope’
<URL:http://rope.sourceforge.net/>.
A good unit test framework (sorry, ‘unittest’, you're a good start but
not very Pythonic) like ‘nose’ (which builds incrementally on
‘unittest’) <URL:http://somethingaboutorange.com/mrl/projects/nose/>.
A test double library (sometimes called a “mock object” library), my
favourite being MiniMock <URL:http://pypi.python.org/pypi/MiniMock>.
Sphinx <URL:http://sphinx.pocoo.org/> for extracting reStructuredText
documentation from your code and rendering it to various formats.
A development-environment isolation tool, like ‘virtualenv’
<URL:http://pypi.python.org/pypi/virtualenv>.
A project build scripting tool which integrates with many of the above
tools, like Paver <URL:http://www.blueskyonmars.com/projects/paver/>.