Python单元测试:具有自己构造函数的testcase类在标准库中失败
我有一个普通的单元测试,只要不使用构造函数,它就可以正常工作Python单元测试:具有自己构造函数的testcase类在标准库中失败,python,unit-testing,Python,Unit Testing,我有一个普通的单元测试,只要不使用构造函数,它就可以正常工作 import sys import unittest class Instance_test(unittest.TestCase): def __init__(self): super(Instance_test, self).__init__() self.attribute = "new" def test_something(self): pass def test_other(
import sys
import unittest
class Instance_test(unittest.TestCase):
def __init__(self):
super(Instance_test, self).__init__()
self.attribute = "new"
def test_something(self):
pass
def test_other(self):
self.assertTrue(True)
pass
def setUp(self):
pass
def tearDown(self):
pass
def suite():
return unittest.makeSuite(Instance_test, "test")
def main():
runner = unittest.TextTestRunner(sys.stdout)
runner.run(suite())
if __name__ == "__main__":
main()
在构造函数处于适当位置时,获取此回溯:
Traceback (most recent call last):
File "f:\gt\check.py", line 31, in main()
File "f:\gt\check.py", line 28, in main
runner.run(suite())
File "f:\gt\check.py", line 24, in suite
return unittest.makeSuite(Instance_test, "test")
File "C:\Python34\lib\unittest\loader.py", line 374, in makeSuite
testCaseClass)
File "C:\Python34\lib\unittest\loader.py", line 70, in loadTestsFromTestCase
loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames))
File "C:\Python34\lib\unittest\suite.py", line 24, in __init__
self.addTests(tests)
File "C:\Python34\lib\unittest\suite.py", line 60, in addTests
for test in tests:
TypeError: __init__() takes 1 positional argument but 2 were given
回溯(最近一次呼叫最后一次):
main()中第31行的文件“f:\gt\check.py”
文件“f:\gt\check.py”,第28行,主目录
runner.run(suite())
文件“f:\gt\check.py”,第24行,在套件中
返回unittest.makeSuite(实例_测试,“测试”)
makeSuite中第374行的文件“C:\Python34\lib\unittest\loader.py”
testCaseClass)
loadTestsFromTestCase中的第70行文件“C:\Python34\lib\unittest\loader.py”
loaded_suite=self.suiteClass(映射(testCaseClass,testCaseNames))
文件“C:\Python34\lib\unittest\suite.py”,第24行,在\uuu init中__
self.addTests(测试)
addTests中第60行的文件“C:\Python34\lib\unittest\suite.py”
对于测试中的测试:
TypeError:\uuuu init\uuuuuu()接受1个位置参数,但提供了2个
有什么问题吗?还有什么其他方法可以让不同的test\u xxx方法共享中心属性?我将使用unittest.TestCase的setUp()和tearDown()方法,而不是init。除了使用
设置
方法外,只需执行与您正在执行的操作相同的操作。只需将名为方法名
的参数添加到您自己的初始化
方法中,您就可以开始了:
class Instance_test(unittest.TestCase):
def __init__(self, methodName='runTest'):
super(Instance_test, self).__init__(methodName=methodName)
self.attribute = "new"
...
基本TestCase.\uuuu init\uuuuu
签名如下:
class TestCase(object):
def __init__(self, methodName='runTest'):
...
如您所见,它需要一个额外的
methodName
参数,没有它就没有构造函数,因此您遇到了失败。之所以发生这种情况,是因为\uuuu init\uuuu
需要多个参数,而您忘记了提供args和kwargs作为参数。应该是这样的-
class Instance_test(unittest.TestCase):
def __init__(self, *args, **kwargs):
super(Instance_test, self).__init__(*args, **kwargs)
self.attribute = "new"
此外,当设置
方法正好用于此目的时,为什么还要重写\uuuu init\uuuu
(正如2achary所建议的那样)
class Instance_test(unittest.TestCase):
def setUp(self):
self.attribute = 'new'
您正在使用未处理的参数对方法进行子类化。您需要使
\uuuu init\uuuu
接受任意参数(通常是*args,**kwargs
)并将它们传递给超类实现。@jonrsharpe:Yesss,谢谢