在python中重载unittest.testcase
发布时间:2020-12-16 23:21:02 所属栏目:Python 来源:网络整理
导读:我试图通过对unittest.testcase类进行子类化来创建自定义单元测试框架,但在处理__init__方法时似乎犯了一个错误. 我无法弄清楚为什么ComplexTest的构造函数在BasicTest中的构造函数之前没有被调用,并且异常似乎也与我的构造函数有关. 我是Python的新手,所以
我试图通过对unittest.testcase类进行子类化来创建自定义单元测试框架,但在处理__init__方法时似乎犯了一个错误.
我无法弄清楚为什么ComplexTest的构造函数在BasicTest中的构造函数之前没有被调用,并且异常似乎也与我的构造函数有关. 我是Python的新手,所以对于如何解决这个特定问题或我的用例的替代架构的任何帮助都将是非常受欢迎的. 谢谢! 1)test_framework.py import unittest class BasicTest(unittest.TestCase): def __init__(self,*args,**kwargs): print('BasicTest.__init__') super(unittest.TestCase,self).__init__(*args,**kwargs) def setUp(self): print('BasicTest.setUp') super(unittest.TestCase,self).tearDown() def tearDown(self): print('BasicTest.tearDown') super(unittest.TestCase,self).tearDown() class ComplexTest(BasicTest): def __init__(self,**kwargs): print('ComplexTest.__init__') super(BasicTest,**kwargs) def setUp(self): print('ComplexTest.setUp') super(BasicTest,self).tearDown() def tearDown(self): print('ComplexTest.tearDown') super(BasicTest,self).tearDown() 2)test.py import unittest import test_framework class TestValueFunctions(test_framework.ComplexTest): def __init__(self,**kwargs): print('TestValueFunctions.__init__') super(test_framework.ComplexTest,**kwargs) def setUp(self): print('TestValueFunctions.setUp') super(test_framework.ComplexTest,self).tearDown() self.value = 4711 def tearDown(self): print('TestValueFunctions.tearDown') super(test_framework.ComplexTest,self).tearDown() def test_value(self): print('TestValueFunctions.test_value') self.assertEqual(self.value,4711) if __name__ == '__main__': unittest.main() 3)当现在尝试运行它时,我看到下面的堆栈 TestValueFunctions.__init__ BasicTest.__init__ Traceback (most recent call last): File "D:MyDevljs_apptrunkexamplespythonunittesttest.py",line 23,in <module> unittest.main() File "C:Python27libunittestmain.py",line 94,in __init__ self.parseArgs(argv) File "C:Python27libunittestmain.py",line 149,in parseArgs self.createTests() File "C:Python27libunittestmain.py",line 155,in createTests self.test = self.testLoader.loadTestsFromModule(self.module) File "C:Python27libunittestloader.py",line 65,in loadTestsFromModule tests.append(self.loadTestsFromTestCase(obj)) File "C:Python27libunittestloader.py",line 56,in loadTestsFromTestCase loaded_suite = self.suiteClass(map(testCaseClass,testCaseNames)) File "D:MyDevljs_apptrunkexamplespythonunittesttest.py",line 7,in __init__ super(test_framework.ComplexTest,**kwargs) File "D:MyDevljs_apptrunkexamplespythonunittesttest_framework.py",line 6,in __init__ super(unittest.TestCase,**kwargs) TypeError: object.__init__() takes no parameters 解决方法
确实你的init方法是错误的.
class BasicTest(unittest.TestCase): def __init__(self,**kwargs) 应该: class BasicTest(unittest.TestCase): def __init__(self,**kwargs): print('BasicTest.__init__') super(BasicTest,**kwargs) 这将在BasicTest的母类(TestCase)上调用__init__. setUp和tearDown也是如此: class BasicTest(unittest.TestCase): ... def setUp(self): print('BasicTest.setUp') super(BasicTest,self).setUp() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |