Перегрузка failUnlessEqual в unittest.TestCase - PullRequest
0 голосов
/ 26 августа 2009

Я хочу перегрузить failUnlessEqual в unittest.TestCase, поэтому я создал новый класс 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)

И я использую это как:

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')

Это то, что я получаю, когда запускаю тесты

>>> 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)

Я ожидал, что сообщение будет «Проверка значения x Ожидается: 2 - Получено: 1»

Класс MyTestCase вообще не используется. Можете ли вы сказать мне, что я делаю не так?

1 Ответ

2 голосов
/ 26 августа 2009

Вы вызываете assertEqual, но определяете failUnlessEqual. Так почему вы ожидаете, что ваш метод вызывается - в конце концов, вы вызываете другой метод?

Возможно, вы посмотрели определение TestCase и увидели строку

assertEqual = assertEquals = failUnlessEqual

Это означает, что метод assertEqual имеет то же определение, что и failUnlessEqual. К сожалению, это не означает, что переопределение failUnlessEqual также переопределит assertEqual - assertEqual остается псевдонимом для определения failUnlessEqual в базовом классе.

Чтобы заставить его работать правильно, вам нужно повторить назначения в вашем подклассе, переопределяя все три имени.

...