unittest.testcase 클래스를 하위 클래스로 분류하여 사용자 정의 단위 테스트 프레임 워크를 만들려고 시도했지만 __init__
메서드를 처리 할 때 실수를 한 것 같습니다.python에서 unittest.testcase을 오버로드합니다.
에있는 생성자보다 먼저 ComplexTest
생성자가 호출되지 않고 예외가 생성자와 관련되어있는 것 같습니다.
나는이 특별한 문제를 해결하는 방법에 대한 도움이나 나의 유스 케이스에 대한 대체 아키텍처를 가장 환영 할 것입니다.
감사합니다.
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, *args, **kwargs):
print('ComplexTest.__init__')
super(BasicTest, self).__init__(*args, **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, *args, **kwargs):
print('TestValueFunctions.__init__')
super(test_framework.ComplexTest, self).__init__(*args, **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:\MyDev\ljs_app\trunk\examples\python\unittest\test.py", line 23, in <module>
unittest.main()
File "C:\Python27\lib\unittest\main.py", line 94, in __init__
self.parseArgs(argv)
File "C:\Python27\lib\unittest\main.py", line 149, in parseArgs
self.createTests()
File "C:\Python27\lib\unittest\main.py", line 155, in createTests
self.test = self.testLoader.loadTestsFromModule(self.module)
File "C:\Python27\lib\unittest\loader.py", line 65, in loadTestsFromModule
tests.append(self.loadTestsFromTestCase(obj))
File "C:\Python27\lib\unittest\loader.py", line 56, in loadTestsFromTestCase
loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames))
File "D:\MyDev\ljs_app\trunk\examples\python\unittest\test.py", line 7, in __init__
super(test_framework.ComplexTest, self).__init__(*args, **kwargs)
File "D:\MyDev\ljs_app\trunk\examples\python\unittest\test_framework.py", line 6, in __init__
super(unittest.TestCase, self).__init__(*args, **kwargs)
TypeError: object.__init__() takes no parameters
'슈퍼'의 큰 장점 중 하나는 슈퍼 클래스를 명시 적으로 지정하지 않아도된다는 것입니다. 오류에서 알 수 있듯이 그 코드로'TestCase .__ init__' 대신'object .__ init__'을 호출하고 있습니다. – Bakuriu
Python 3에서만 'super'에 대한 클래스 인수를 생략 할 수 있습니다. – chepner