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.

414<br />

Techniques avancées<br />

QUATRIÈME PARTIE<br />

pass<br />

[tziade@Tarek tests]$ python test_doctests.py -v<br />

[...]<br />

Trying:<br />

2<br />

Expecting:<br />

2<br />

ok<br />

Une autre particularité de ce type de test unitaire est liée à son fonctionnement<br />

intrinsèque : la réussite du test se basant sur la sortie de l’interpréteur, il est nécessaire<br />

de prendre des précautions lorsque le retour est susceptible de varier.<br />

C’est le cas par exemple pour les affichages de dictionnaires : l’ordre de sortie n’est pas<br />

garanti, et peut varier d’une exécution à l’autre. Il convient dans ce cas de trier le dictionnaire<br />

avant affichage ou de faire des tests sur chaque membre de manière explicite.<br />

Précautions d’usage pour les dictionnaires<br />

def mon_dico():<br />

"""<br />

>>> mon_dico()['b'] # test explicite<br />

2<br />

>>> liste = mon_dico().items()<br />

>>> liste.sort()<br />

>>> liste # test nécessitant un ordre constant<br />

[('a', 1), ('b', 2), ('c', 3)]<br />

"""<br />

return {'a': 1, 'b': 2, 'c': 3}<br />

Les objets de type float sont également à manipuler avec précaution, car les valeurs<br />

retournées varient d’un système à l’autre. Le plus simple étant d’arrondir les valeurs<br />

comparées par le biais de round() ou de conserver une fraction dont le résultat est à<br />

coup sûr identique sur tous les systèmes, à savoir de la forme x/2.0**y.<br />

Les adresses mémoire qui peuvent s’afficher lorsque l’on manipule des objets sont<br />

aussi susceptibles de varier. Un appel à la primitive id() par exemple a toutes les<br />

chances de retourner un entier différent à chaque fois que le test est lancé puisqu’il<br />

est calculé en fonction de l’adresse mémoire. Ces valeurs ne peuvent donc pas être<br />

employées telles quelles dans les tests.<br />

Pour pouvoir s’affranchir de ce problème, il est possible dans ce cas de remplacer la<br />

valeur hexadécimale par des points de suspension (...) représentant une ellipse et<br />

d’activer une option pour le signaler. Cette option est à ajouter en fin de ligne, par un<br />

marqueur ELLIPSIS.

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

Saved successfully!

Ooh no, something went wrong!