Salut,
je suis tombé sur un truc sur lequel j'ai mis pas mal de temps pour voir d'où venait le problème. Voici un exemple simple :
- un module, nommé module_test pour l'occasion
Code :
class table: name = None attr = [] def __init__(self, name): self.name = name def attr_add(self, att): self.attr.append(att)
|
- et un petit jeu de test unitaire (noté la subtile inversion des noms des méthodes dans la classe TableTest ) :
Code :
#!/usr/bin/env python import unittest import module_test VERBOSITY = 2 class TableTest(unittest.TestCase): def test2(self): t = module_test.table('t_test') self.assertEqual(t.name, 't_test') self.assertEqual(t.attr, []) def test1(self): t = module_test.table('t_test') att = 'gni' t.attr_add(att) self.assertEqual(len(t.attr), 1) self.assertEqual(t.attr[0], att) def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TableTest)) return suite if __name__ == "__main__": unittest.TextTestRunner(verbosity=VERBOSITY).run(suite())
|
Bref, rien de transcendant
Le problème est :
$ ./test_unit.py
test1 (__main__.TableTest) ... ok
test2 (__main__.TableTest) ... FAIL
======================================================================
FAIL: test2 (__main__.TableTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_unit.py", line 14, in test2
self.assertEqual(t.attr, [])
File "/usr/lib/python2.3/unittest.py", line 302, in failUnlessEqual
raise self.failureException, \
AssertionError: ['gni'] != []
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=1)
|
Pourquoi je récupère cette valeur d'attribut pour table.attr ?
Bien sur, si je rajoute un self.attr = [] dans le constructeur de table, le problème est résolu, mais j'aimerais comprendre ce qui se passe ...