• 4 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours est en vidéo.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Mis à jour le 07/10/2017

Organisez vos tests en classes

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

 

La Programmation Orientée Objet appliquée aux tests

Attaquons-nous désormais aux tests de la classe  Zone  !

Avant de coder, réfléchissons à ce que nous voudrons tester. Nous allons tester des méthodes importantes :  find_zone_that_contains() ,  add_inhabitant() ,  population_density()  et  average_agreeableness() . Nous allons aussi tester que  Zone.ZONES  renvoie bien la liste des zones de notre monde.

Bien. Nous voyons rapidement que chacun de ces tests nous obligera à créer au moins les quatre objets suivants : une zone, deux positions (pour créer la zone) et un agent. Ainsi :

position1 = script.Position(100, 33)
position2 = script.Position(101, 34)
zone = script.Zone(position1, position2)
agent = script.Agent(position1, agreeableness=1)

Ce serait vraiment fastidieux de dupliquer ce code à chaque écriture d'un test. Mais surtout, cela nous oblige à nous répéter et ce n'est pas très maintenable par la suite.

J'aimerais bien déclarer ces variables et les réutiliser dans mes fonctions qui testent des méthodes de la classe   Zone. Avez-vous une idée de la manière dont nous pourrions procéder ?

Je vous laisse réfléchir...

...

Et si nous créions une classe dans nos tests ? Nous pourrions ainsi déclarer des attributs de classe et les réutiliser à l'envi. Cela nous permettra également de bien différencier nos tests.

Réorganisation des tests

Créons une classe  TestZone  et ajoutons 4 attributs de classe :

class TestZone:
    POSITION1 = script.Position(100, 33)
    POSITION2 = script.Position(101, 34)
    ZONE = script.Zone(POSITION1, POSITION2)
    AGENT = script.Agent(POSITION1, agreeableness=1)

Nous pouvons désormais écrire notre premier test.

Assurons-nous que toutes les zones sont bien créées :

class TestZone:
    ...

    def test_get_zones(self):
        assert len(script.Zone.ZONES) == 64800

Lançons le script avec Pytest... Et ça fonctionne !

Continuons :

class TestZone:
    ...
    # - Zone :
    #   - trouver une zone qui contient une position
    def test_find_zone_that_contains(self):
        found_zone = script.Zone.find_zone_that_contains(self.POSITION1)
        assert found_zone.corner1.longitude == self.ZONE.corner1.longitude

    #   - ajouter un habitant dans une zone
    def test_add_inhabitant_in_zone(self):
        self.ZONE.add_inhabitant(self.AGENT)
        assert len(self.ZONE.inhabitants) == 1

    #   - récupérer toutes les instances Zone (Zone.ZONES)
    # On devrait avoir exactement 64800 zones
    def test_get_zones(self):
        assert len(script.Zone.ZONES) == 64800

    #   - récupérer la densité de population d'une zone
    def test_get_population_density(self):
        assert self.ZONE.population_density() == 8.087793508722422e-05

#   - récupérer l'agréabilité moyenne d'une zone
    def test_get_average_agreeableness(self):
        assert self.ZONE.average_agreeableness() == 1

 

Continuez de la même manière pour les classes  Agent  et  Position. Nous verrons plus tard les classes  AgreeablenessGraph  et  IncomeGraph. Je vous retrouve au chapitre suivant pour tester notre module  download_agents.py!

 

A vous de jouer !

Cliquez sur ce lien 

 

Code de ce chapitre

Retrouvez l'intégralité du code de ce chapitre sur Github !

Exemple de certificat de réussite
Exemple de certificat de réussite