Date de première publication : 2022/10/4
L'objectif de ce petit TP est de vous montrer les avantages de l'encapsulation et de faire des tests unitaires
unittest
La documentation de la bibliothèque standard de tests en python - unittest - est ici :
https://docs.python.org/3/library/unittest.html
Voici un petit exemple pour tester si la méthode get_message()
de la classe Point
renvoie bien coucou
import unittest
class TestPoint(unittest.TestCase):
def test_message(self):
p = Point()
self.assertEqual(p.get_message(), "coucou", "doit afficher coucou")
def test_point_0(self):
p = Point()
self.assertEqual(p.get_x(), 0)
self.assertEqual(p.get_y(), 0)
self.assertEqual(p.get_distance(), 0)
self.assertEqual(p.get_angle(), 0)
if __name__ == '__main__':
unittest.main()
Encore faut-il avoir écrit la classe Point
!
la classe Point
On vous propose de séparer les codes dans des fichiers séparés (on parle alors de module/bibliothèque/library)
Si le code de la classe Point
est dans le module point.py
, il faudra importer la classe Point
dans le module test_point
:
import point
p = point.Point()
ou bien
from point import Point
p = Point()
Ecrire les tests unitaires et tester pour la classe Point avec des coordonnées cartésiennes x et y...
Une méthode pas encore implémentée peut renvoyer une valeur spéciele NotImplemented
pour se signaler (on peut aussi imaginer que cette fonction lève une exception comme NotImplementedError
).
Proposer des méthodes pour calculer la distance et l'angle. Exprimer l'angle en radians et en degrés :-)
Que se passe-t-il si la classe est mise à jour pour stocker des coordonnées polaires et non plus des coordonnées cartésiennes ?
Un petit lien si vous êtes en panne :
https://www.dcode.fr/changement-coordonnees-2d
Quand on aura vu les méthodes de classe, on pourra proposer des "constructeurs" pour une instance à partir de coordonnées cartésiennes ou polaires.