这是因为您
__init__()不正确地重写了。几乎可以肯定,您根本不想覆盖
__init__()。你应该做一切
setUp()。我已经使用
unittest了10多年了,我认为自己从未被超越
__init__()。
但是,如果确实需要重写
__init__(),请记住,您不控制构造函数的调用位置,而是框架为您调用。因此,您必须提供一个可以调用的签名。从源代码(
unittest/case.py),该签名为:
def __init__(self, methodName='runTest'):
执行此操作的安全方法是接受任何参数,然后将它们传递给基类。这是一个有效的实现:
class baseTest(unittest.TestCase): def __init__(self, *args, **kwargs): unittest.TestCase.__init__(self, *args, **kwargs) def setUp(self): print "base.setUp()" def tearDown(self): print "base.tearDown()"class TestSomething(baseTest): def __init__(self, *args, **kwargs): baseTest.__init__(self, *args, **kwargs) self.controller = object() def test_silly(self): self.assertTrue(1+1 == 2)



