__init__给出一个参数2给出unittest

时间:2017-02-17 03:15:40

标签: python python-unittest

我收到以下错误

TypeError: __init__() takes exactly 1 argument (2 given)

当我运行以下python时:

import unittest
from unittest import TestCase

class myClass( unittest.TestCase ):

    def __init__( self ):
        pass

if __name__ == '__main__':
    unittest.main( argv=sys.argv, testRunner = unittest.TextTestRunner(verbosity=2))

有什么想法吗?我需要运行init,因为我只想做一次设置工作。每次测试都没有一次。这对整个测试运行时间来说是一个很大的优化。

以下是堆栈抓取的其余部分:

Traceback (most recent call last):
File "./RestEditRecord.py", line 1439, in <module>
unittest.main( argv=sys.argv, testRunner = unittest.TextTestRunner(verbosity=2))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.py", line 94, in __init__
self.parseArgs(argv)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.py", line 149, in parseArgs
self.createTests()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.py", line 155, in createTests
self.test = self.testLoader.loadTestsFromModule(self.module)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/loader.py", line 65, in loadTestsFromModule
tests.append(self.loadTestsFromTestCase(obj))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/loader.py", line 56, in loadTestsFromTestCase
loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames))
TypeError: __init__() takes exactly 1 argument (2 given)

1 个答案:

答案 0 :(得分:1)

阅读the docs for the class you're extending; unittest.TestCase的初始值设定项采用可选参数,如果您不接受它,并且它被传递,您将收到此错误。

无论如何,很少有理由覆盖__init__的{​​{1}};测试设置在TestCase中完成(每次测试运行一次,因此一次测试的状态改变不影响另一次测试的行为),而不是setUp(总共运行一次)。你将继承__init__,并且由于你的__init__没有做任何额外的事情,所以完全没有做到这一点。

如果有合法用途,请确保将初始化委托给链:

__init__

当然,正如评论中所指出的,你可以有单独的类设置(从Python 2.7 / 3.2开始)using setupClass,所以你根本不需要处理class Suite_Edit_AutoEntry( unittest.TestCase ): def __init__(self, *args, **kwargs): # Accept all unrecognized args for delegation # Delegate to parent initializer super().__init__(*args, **kwargs) # On Py2, super(Suite_Edit_AutoEntry, self)... ... do additional initialization here ... 的挑剔