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:
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:
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...