IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Tests unitaires questions


Sujet :

Python

  1. #1
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut Tests unitaires questions
    Bonjour,


    J'ai 2 questions relatives aux tests unitaires.

    1) dans ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    def test_chargement(self):
            """Test le fonctionnement de la méthode 'chargement' de la classe
    CreationLabyrinthe. Vérifie que 4 des caractères de la carte facile se trouvent
    bien aux coordonnées de la carte instanciée"""
     
            # création d'une liste à partir de la carte 'facile'
            self.byby.chargement(self.chemin,self.nom)
     
            # on vérifie que les caractères soient à la bonne place,
            # et on en déduit donc, avec cet échantillon, que la carte est bien
            # celle choisie
            self.assertEqual(self.byby.labyrinthe[0][0], 'O')
            self.assertEqual(self.byby.labyrinthe[1][1], ' ')
            self.assertEqual(self.byby.labyrinthe[2][2], '.')
            self.assertEqual(self.byby.labyrinthe[5][9], 'U')
    il me vérifie bien les 4 assertions ?
    Parce qu'évidemment, il ne détaille pas, à l'exécution il me dit que les 3 tests sont OK, je n'ai pas le détail

    2) une légende prétend qu'on peut exécuter les tests à partir d'une console Windows, en tapant :
    mais qu'il faut être dans le répertoire Python.
    ça veut dire quoi concrètement ?
    chez moi, mes tests, et tout ce que je fait, n'est pas dans le même répertoire que Python, mais sur une autre partition du DD, dédiée à mes documents à moi.
    donc...euh....je vais où ? Comment je peux espérer exécuter mes tests sous Windows ?


    D'avance merci

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par RowanMayfair Voir le message
    1) dans ce bout de code...il me vérifie bien les 4 assertions ?
    Oui

    Citation Envoyé par RowanMayfair Voir le message
    Parce qu'évidemment, il ne détaille pas, à l'exécution il me dit que les 3 tests sont OK, je n'ai pas le détail
    Déjà moi je vois 4 tests et non 3 (enfin je pense que tu parles des assertEqual). Mais rien ne t'empêche de rajouter un 5° (4° ?) test faux (style self.assertEqual(0, 1)) pour voir ce qui se passe...

    Citation Envoyé par RowanMayfair Voir le message
    une légende prétend qu'on peut exécuter les tests à partir d'une console Windows, en tapant : -m unittest
    Oui, c'est la légende de l'auto-apprentissage et la recherche de tutoriaux pour se former soi-même. On en a fait un film récemment...

    Citation Envoyé par RowanMayfair Voir le message
    mais qu'il faut être dans le répertoire Python. ça veut dire quoi concrètement ?
    Alors ce n'est pas -m unittest mais python.exe -m unittest script.py. Ca va exécuter le script "script.py" en y appliquant différents tests de performances et te donner un résultat. Evidemment si tu programmes ledit script pour s'interfacer avec le module "unittest" ça n'en sera que mieux.
    Mais pour pouvoir appeler le programme "python.exe", il faut soit que tu te trouves à l'endroit où il se trouve (donc je pense dans un dossier ressemblant à "c:\python3\bin"), soit que le dossier contenant "python.exe" soit écrit dans le PATH.
    Le PATH c'est une variable d'environnement qui donne les différents chemins possibles des différents programmes qu'on est susceptible d'appeler manuellement. Sous Linux c'est un truc assez connu car sous Linux on travaille beaucoup en lignes de commandes. Ca existe aussi sous zindow mais c'est là un truc moins connu des utilisateurs de cet OS qui n'ont pas souvent l'habitude de travailler en console DOS.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Oui


    Déjà moi je vois 4 tests et non 3 (enfin je pense que tu parles des assertEqual). Mais rien ne t'empêche de rajouter un 5° (4° ?) test faux (style self.assertEqual(0, 1)) pour voir ce qui se passe...
    c'est parce que je me suis mal exprimée
    le code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    import os
    import unittest
    from random import choice
    from creation_labyrinthe import*
     
    class RobocTest(unittest.TestCase):
     
        """Test case utilisé pour tester les fonctions de la classe CreationLabyrinthe
    du module 'creation_labyrinthe'."""
     
        def setUp(self):
            """Initialisation des tests :
                - instanciation d'un objet CreationLabyrinthe
                - création d'un dictionnaire 'joueurs'
                - enregistrement du chemin
                - choix de la carte ('1. facile')
                """
            self.byby = CreationLabyrinthe()
            self.joueurs = {'socket':1,'sockett':2,'sockettt':3}
            self.chemin = os.path.abspath("cartes")
            self.nom = '1. facile.txt'
     
        def test_chargement(self):
            """Test le fonctionnement de la méthode 'chargement' de la classe
    CreationLabyrinthe. Vérifie que 4 des caractères de la carte facile se trouvent
    bien aux coordonnées de la carte instanciée"""
     
            # création d'une liste à partir de la carte 'facile'
            self.byby.chargement(self.chemin,self.nom)
     
            # on vérifie que les caractères soient à la bonne place,
            # et on en déduit donc, avec cet échantillon, que la carte est bien
            # celle choisie
            self.assertEqual(self.byby.labyrinthe[0][0], 'O')
            self.assertEqual(self.byby.labyrinthe[1][1], ' ')
            self.assertEqual(self.byby.labyrinthe[2][2], '.')
            self.assertEqual(self.byby.labyrinthe[5][9], 'U')
     
        def test_generation_aleatoire(self):
            """Test le fonctionnement de la méthode 'generation_aleatoire' de la
    classe CreationLabyrinthe. En créant 2 cartes avec cette méthode, on vérifiera
    qu'elles sont bien différentes """
            # exécution de la méthode pour création d'une carte aléatoire
            self.byby.generation_aleatoire()
            # enregistrement de la liste ainsi obtenue dans la variable liste1
            liste1 = self.byby.labyrinthe
     
            # ensuite, on recommence, on exécute la même méthode
            self.byby.generation_aleatoire()
            # on enregiste la liste obtenue
            liste2 = self.byby.labyrinthe
     
            # et maintenant on s'assure que les listes ne sont pas les mêmes
            self.assertNotEqual(liste1,liste2)
     
     
        def test_robot(self) :
            """Teste le fonctionnement de la méthode 'robot' de la classe
    CreationLabyrinthe. Le robot doit etre placé sur la carte de manière aléatoire
    Donc vérification que, après placement du robot :
            - 2 cartes identiques au départ deviennent différentes
            - que le robot '1' se trouve bien dans la liste
            - ainsi que les 2 robots suivants
            """
     
            # on charge la carte facile dans une liste
            self.byby.chargement(self.chemin,self.nom)
            # ensuite on exécute notre robot, pour qu'il place les valeurs du dictio
            self.byby.robot(self.joueurs)
            # on enregistre la liste ainsi obtenue
            carte1 = self.byby.labyrinthe
     
            # on charge la même carte
            self.byby.chargement(self.chemin,self.nom)
            # de nouveau on place le robot
            self.byby.robot(self.joueurs)
            # et on enregistre la liste
            carte2 = self.byby.labyrinthe
     
            # encore une liste...
            liste = []
            # qui va contenir tous les symboles de la carte
            for ligne in carte2 :
                for elt in ligne :
                    liste.append(elt)
     
     
            # on vérifie que nos 2 cartes identiques pourvues de robots 
            # aléatoires ... ne sont donc plus identiques
            self.assertNotEqual(carte1,carte2)
            # et on vérifie que nos valeurs (robots) sont bien dans la liste
            self.assertIn('1',liste)
            self.assertIn('2',liste)
            self.assertIn('3',liste)
     
     
     
    unittest.main()
    et le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    ----------------------------------------------------------------------
    Ran 3 tests in 0.019s
    
    OK
    voilà, il me dit 3 OK, pas d'erreur, c'est pour ça que je n'étais pas absolument certaine qu'il me testait toutes les assertions...pour chaque test de méthode


    Citation Envoyé par Sve@r Voir le message
    Oui, c'est la légende de l'auto-apprentissage et la recherche de tutoriaux pour se former soi-même. On en a fait un film récemment...


    Alors ce n'est pas -m unittest mais python.exe -m unittest script.py. Ca va exécuter le script "script.py" en y appliquant différents tests de performances et te donner un résultat. Evidemment si tu programmes ledit script pour s'interfacer avec le module "unittest" ça n'en sera que mieux.
    Mais pour pouvoir appeler le programme "python.exe", il faut soit que tu te trouves à l'endroit où il se trouve (donc je pense dans un dossier ressemblant à "c:\python3\bin"), soit que le dossier contenant "python.exe" soit écrit dans le PATH.
    Le PATH c'est une variable d'environnement qui donne les différents chemins possibles des différents programmes qu'on est susceptible d'appeler manuellement. Sous Linux c'est un truc assez connu car sous Linux on travaille beaucoup en lignes de commandes. Ca existe aussi sous zindow mais c'est là un truc moins connu des utilisateurs de cet OS qui n'ont pas souvent l'habitude de travailler en console DOS.
    Aaaahhhh...faut aller se mettre dans le dossier de Python, et pas dans celui du test.
    Bon je vais essayer de faire ça.
    En effet, la console je maîtrise pas du tout. Je sais à peine me déplacer d'un répertoire à un autre

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par RowanMayfair Voir le message
    c'est parce que je me suis mal exprimée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    ----------------------------------------------------------------------
    Ran 3 tests in 0.019s
    
    OK
    voilà, il me dit 3 OK, pas d'erreur, c'est pour ça que je n'étais pas absolument certaine qu'il me testait toutes les assertions...pour chaque test de méthode
    Ce sont les tests des 3 méthodes nommées "test_xxx" (test_chargement, test_generation_aleatoire et test_robot). Et si une des assertions situées dans "test_chargement" n'est pas valide, le test complet de cette fonction sera faux et tu n'auras pas "OK" au final.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [Test] Question sur les test unitaires
    Par kevin254kl dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 27/04/2019, 17h37
  2. [Question] [CPPUNIT] Séparation des Tests Unitaires
    Par darkhades dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 26/09/2011, 09h56
  3. Tests unitaires en C#
    Par Bouboubou dans le forum Test
    Réponses: 2
    Dernier message: 01/10/2004, 13h03
  4. [TESTS] Tests unitaires
    Par mathieu dans le forum Test
    Réponses: 4
    Dernier message: 08/01/2004, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo