17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

394<br />

Techniques avancées<br />

QUATRIÈME PARTIE<br />

Régression<br />

[tziade@Tarek Desktop]$ python tests_unitaires.py<br />

Traceback (most recent call last):<br />

File "tests_unitaires.py", line 16, in ?<br />

assert moyenne(5) == 5<br />

AssertionError<br />

La modification, qui est valide pour le nouveau use case, a ajouté un bogue qui a provoqué<br />

une régression sur un autre use case, décelée par le test unitaire.<br />

Dans notre cas, il s’agit d’une erreur d’indentation classique : la ligne somme +=<br />

nombre qui suit le raise a été indentée par mégarde.<br />

Troisième version corrigée<br />

def moyenne(*nombres):<br />

taille = len(nombres)<br />

if taille == 0:<br />

return None<br />

somme = 0<br />

for nombre in nombres:<br />

if not isinstance(nombre, int):<br />

raise TypeError("'%s' n'est pas un entier" % str(nombre))<br />

somme += nombre<br />

return somme / taille<br />

Regroupement des tests<br />

En termes de découpage, on associe généralement un ensemble de tests par module<br />

de code Python. Ce procédé permet de valider que les différentes classes, constantes<br />

et fonctions regroupées dans un même module représentent une brique logique du<br />

programme : si les éléments regroupés ne se testent pas de manière simple et homogène<br />

dans l’ensemble de tests, il y a fort à parier que leur regroupement n’est pas bon.<br />

En reprenant l’exemple précédent, si la fonction moyenne() fait partie d’un module<br />

utils.py, on peut regrouper le code de test dans un module test_utils.py.<br />

Tests plus complexes : raconter une histoire<br />

Pour des tests plus longs qu’un simple appel à une fonction, la méthode la plus simple<br />

consiste à raconter des petites histoires, qui correspondent à des scenarii d’utilisation.<br />

Ces histoires sont des mélanges de commentaires, lignes de code et assertions.<br />

L’exemple ci-contre est un test possible pour le module cPickle.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!