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 :

Etrange bug, pytest et nosetest


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Analyste cogniticien
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Analyste cogniticien

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Par défaut Etrange bug, pytest et nosetest
    Bonjour à tous,

    Je tiens à partager un problème que je suppose être un bug. Je fais un test tout simple qui va tester l'instance d'une classe A avec un attribut qui s'initialise comme une liste. Il y a 2 tests, chaque test fait une instance de A. Il semblerait que lors de la deuxième instance, au lieu d'initialiser l'attribut comme une nouvelle liste, il soit une référence vers l'attribut de la 1ère instance.

    Bon c'est peut-être confus alors voici un code triviale pour comprendre le problème:
    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
     
    import unittest
     
     
    class A:
        def __init__(self,  att=[]):
            self.att = att
     
     
    def make_A(att):
        a_instance = A()
        for p in att:
            a_instance.att.append(p)
        return a_instance
     
     
    class Test(unittest.TestCase):
     
        def test_1(self):
            a = make_A(att=['a','b','c'])
            self.assertEqual(a.att, ['a','b','c'])
     
        def test_2(self):
            b = make_A( att=['d','e','f'])
            self.assertEqual(b.att, ['d','e','f'])
    Normalement les tests devraient marcher mais lorsque je les lance avec pytest ou nostest voici l'erreur :

    FAIL: test_2 (tests.test.Test)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
    File "~/workspace/tests/test.py", line 24, in test_2
    self.assertEqual(b.att, ['d','e','f'])
    AssertionError: Lists differ: ['a', 'b', 'c', 'd', 'e', 'f'] != ['d', 'e', 'f']

    First differing element 0:
    'a'
    'd'

    First list contains 3 additional elements.
    First extra element 3:
    'd'

    - ['a', 'b', 'c', 'd', 'e', 'f']
    + ['d', 'e', 'f']


    Le seul moyen que j'ai trouvé pour résoudre ce problème est de définir la classe A comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class A:
        def __init__(self,  att=None):
            if att is None:
                self.att = []
            else:
                self.att = att
    Mais bon comme dans mon projet j'ai beaucoup d'arguments sous forme de liste c'est très moche...

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 703
    Par défaut
    Citation Envoyé par franofcholet Voir le message
    Je tiens à partager un problème que je suppose être un bug.
    Ce n'est pas un bug mais une feature... qui surprend le débutant lorsqu'il utilise un mutable comme argument par défaut dans une fonction. C'est même mentionné dans le Python tutorial...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trés etrange bug
    Par uriotcea dans le forum Débuter
    Réponses: 7
    Dernier message: 25/01/2011, 08h09
  2. Etrange bug de tableau
    Par anthonyplay dans le forum Débuter
    Réponses: 10
    Dernier message: 29/11/2009, 15h41
  3. Bug etrange, reaction de IE6 différente avec mon site en local ou en ligne
    Par maxfive7 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/08/2007, 01h02
  4. Réponses: 1
    Dernier message: 04/10/2006, 19h49
  5. gros bug sur windows etrange !!
    Par Nemesys dans le forum Windows XP
    Réponses: 17
    Dernier message: 10/04/2006, 22h55

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