在子类中使用定义的变量用于基类中的方法

时间:2018-01-22 10:21:19

标签: python pytest

我有一个基类和两个不同的子类(它们在3个不同的模块中) 在基类中,我有用于子类的测试方法 我希望基类中的测试方法使用子类中定义的变量。但是当我在子类中运行测试方法时,我无法访问子类中的变量 有人可以帮我解决这个问题吗?

P.S。:我不能使用__init__构造函数(不能收集测试类)!

Error with __init__ contructor:   No tests found

============================== warnings summary =============================== src/test_icd_operation.py::TestICDFields   cannot collect test class
'TestICDFields' because it has a __init__ constructor

-- Docs: http://doc.pytest.org/en/latest/warnings.html
========================= 1 warnings in 16.80 seconds =========================

Process finished with exit code 0

代码

class BaseClassExample:
  table_name = None

  def test_field_for_both_devices(self):
    firstname = get_field(table_name)



class SubClass1(BaseClassExample):
  table_name = 'Pacer'

  def test_field1():
    field1 = get_field(table_name)



class SubClass2(BaseClassExample):
  table_name = 'ICD'

  def test_field2(self):
    field2 = get_field(table_name)

因此,当我在类SubClass1中运行测试时,我希望table_name上的变量BaseClassExample从子类{中的变量中获取值Pacer {1}}。

1 个答案:

答案 0 :(得分:0)

使用self.table_name

class BaseClassExample:
  table_name = None

  def test_field_for_both_devices(self):
    firstname = get_field(self.table_name)



class SubClass1(BaseClassExample):
  table_name = 'Pacer'

  def test_field1():
    field1 = get_field(self.table_name)



class SubClass2(BaseClassExample):
  table_name = 'ICD'

  def test_field2(self):
    field2 = get_field(self.table_name)

说明:Python有一些namespaces - 全局,本地,类和实例。您无法访问table_name,因为Python在本地和全局命名空间中查找并失败。您可以访问self.table_name,因为它的实例名称空间也可以访问类名称空间(如果名称未在实例中隐藏(在self中)。