2009-08-26 6 views
0

Je veux surcharger failUnlessEqual en unittest.TestCase donc je créé une nouvelle classe de TestCase:Surcharger failUnlessEqual dans unittest.TestCase

import unittest 

class MyTestCase(unittest.TestCase): 
    def failUnlessEqual(self, first, second, msg=None): 
     if msg: 
      msg += ' Expected: %r - Received %r' % (first, second) 
     unittest.TestCase.failUnlessEqual(self, first, second, msg) 

Et je l'utilise comme:

class test_MyTest(MyTestCase): 
    def testi(self): 
     i = 1 
     self.assertEqual(i, 2, 'Checking value of i') 
    def testx(self): 
     x = 1 
     self.assertEqual(x, 2, 'Checking value of i') 

C'est ce que Je reçois quand je lance les tests

>>> unittest.main() 
FF 
====================================================================== 
FAIL: testi (__main__.test_MyTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "<stdin>", line 4, in testi 
AssertionError: Checking value of i 

====================================================================== 
FAIL: testx (__main__.test_MyTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "<stdin>", line 7, in testx 
AssertionError: Checking value of x 

---------------------------------------------------------------------- 
Ran 2 tests in 0.000s 

FAILED (failures=2) 

Je m'attendais à ce que le message serait 'Vérification de la valeur de x Expecting: 2 - Reçu: 1 '

La classe MyTestCase n'est pas utilisée du tout. Pouvez-vous me dire ce que je fais mal?

Répondre

2

Vous appelez assertEqual, mais définissez failUnlessEqual. Alors, pourquoi voudriez-vous que votre méthode soit appelée - vous appelez une méthode différente, après tout?

Peut-être que vous avez regardé la définition de TestCase, et vu la ligne

assertEqual = assertEquals = failUnlessEqual 

Cela signifie que la méthode assertEqual a la même définition que failUnlessEqual. Malheureusement, cela ne signifie pas que failUnlessEqual remplacera aussi assertEqual - assertEqual reste un alias pour la définition failUnlessEqual dans la classe de base. Pour le faire fonctionner correctement, vous devez répéter les affectations dans votre sous-classe, redéfinissant ainsi les trois noms.

+0

Bien sûr. Merci. –

Questions connexes