Copy of https://perso.isima.fr/loic/python/exo_point.php
tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
Institut d'informatique ISIMA
  • twitter
  • linkedin
  • viadeo

Point

 Cette page commence à dater. Son contenu n'est peut-être plus à jour. Contactez-moi si c'est le cas!

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.