我想在unittest.TestCase中重载failUnlessEqual,所以我创建了一个新的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类。 你能告诉我我做错了吗?
答案 0 :(得分:2)
您正在调用assertEqual,但定义failUnlessEqual。那么为什么你会期望调用你的方法 - 毕竟你调用的是另一种方法?
也许您已经查看了TestCase的定义,并看到了
行assertEqual = assertEquals = failUnlessEqual
这意味着assertEqual方法与failUnlessEqual具有相同的定义。不幸的是,这并不意味着重写failUnlessEqual也会覆盖assertEqual - assertEqual仍然是基类中failUnlessEqual定义的别名。
为了使其正常工作,您需要在子类中重复分配,从而重新定义所有三个名称。