遵循此thread的答案之后,我尝试使用具有以下三个类的python unittest覆盖测试项目的超类init函数:
base.py
import unittest
class BaseTest(unittest.TestCase):
def setUp(self):
print '\n\t Prepare configuration'
#: executed after each test
def tearDown(self):
print '\n\t Closing session'
helper.py
from base import *
class HELPER(BaseTest):
""" Predefine Parameter """
URL = ''
ID = ''
Module = ''
def __init__(self, module=''):
self.Module = module
def open_url(self):
print "INIT FROM SUPER CLASS IS "
print self.Module
status_code = 200
self.assertEqual(200,status_code)
test_province.py
from helper import *
class TestProvince(HELPER):
def __init__(self, module = ''):
super(TestProvince, self).__init__()
self.Module = 'Province'
def test_open_url(self):
self.open_url()
if __name__ == "__main__":
unittest.main()
详细信息是,在test_province.py
中,我尝试覆盖超类HELPER
的init函数,但不适用于错误执行
AttributeError: 'TestProvince' object has no attribute '_testMethodName'
这是什么问题或缺失?如何正确覆盖超类初始化函数?请帮助谢谢
答案 0 :(得分:1)
unittest.TestCase
的文档字符串包含以下文本:
如果有必要重写
__init__
方法,则必须始终调用基类__init__
方法。重要的是,子类不得更改其__init__
方法的签名,因为类的实例由框架的各个部分自动实例化以便运行。
所以问题不在于TestProvince
是如何从HELPER
继承的,而是问题是HELPER
是如何覆盖从库代码继承的__init__
方法的。如果您向super(HELPER, self).__init__
添加呼叫,则可能会正常工作。
您可能还需要更改__init__
以匹配基类使用的签名:__init__(self, methodName='runTest')
最后一点:Python 2将于今年年底失去对Python开发人员的官方支持,因此,现在最好学习Python 3,而不是学习Python 2,而他们需要更新您的Python。较新版本的知识。在这种情况下这是相关的,因为Python 3允许您不带任何参数使用super
,这非常好(无需使用当前的类名重复自己)。
答案 1 :(得分:0)
首先,非常感谢@Blckknght,您提供了有用的详细答案。
我设法从这个old thread中找到了解决方案(7年前),所以我将所有三个类更改如下:
base.py
from base import *
class HELPER(BaseTest):
""" Predefine Parameter """
URL = ''
ID = ''
Module = ''
# *** Adding init function from class BaseTest ***
def __init__(self, *args, **kwargs):
BaseTest.__init__(self, *args, **kwargs)
self.controller = object()
def open_url(self):
print "INIT FROM SUPER CLASS IS "
print self.Module
status_code = 200
self.assertEqual(200,status_code)
helper.py
class TestProvince(HELPER):
# *** Calling init function from class HELPER
def __init__(self, *args, **kwargs):
HELPER.__init__(self,*args, **kwargs)
self.Module = 'Province'
def test_open_url(self):
self.open_url()
if __name__ == "__main__":
unittest.main()
test_province.py
从助手导入*
var myList = new List<object>();
myList?.Add(new object());
此后,我可以从子类TestProvince中访问超类HELPER中的任何变量。
问题的根本原因可能是我可能尝试继承unittest类的testCase的 init ()函数,而不是HELPER类本身。谢谢