Kei*_*ith 7 python python-unittest
我收到以下错误
TypeError: __init__() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)
当我运行以下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))
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我需要运行 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)
Run Code Online (Sandbox Code Playgroud)
阅读您要扩展的类的文档;unittest.TestCase的初始值设定项采用可选参数,如果您不接受它,并且它被传递,您将收到此错误。
无论如何,很少有一个很好的理由来覆盖__init__a TestCase;测试设置是在setUp(每个测试运行一次,因此一个测试中更改的状态不会影响另一个测试的行为)完成的,而不是__init__(总共运行一次)。你将继承__init__,并且由于你__init__没有做任何额外的事情,所以拥有它是愚蠢的。
如果您确实有合法用途,请确保将初始化委托给链:
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 ...
Run Code Online (Sandbox Code Playgroud)
当然,正如评论中所指出的,您可以使用单独的类设置(从 Python 2.7/3.2 开始),这样setupClass您就不必处理 的__init__挑剔。