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:
Normalement les tests devraient marcher mais lorsque je les lance avec pytest ou nostest voici l'erreur :
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'])
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:
Mais bon comme dans mon projet j'ai beaucoup d'arguments sous forme de liste c'est très moche...
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
Partager