Как ссылаться на объект в классе с помощью декоратора
У меня есть список dicts, определенных в setUpClass
в Django TestCase
:
class MyTest(TestCase):
@classmethod
def setUpClass(cls):
myobj = MyModel.objects.create()
MY_LIST = [
({ 'key1': {'a': myobj.id, 'b': 2}},),
({ 'key2': {'a': myobj.id, 'b': 2}},),
]
Как ссылаться на MY_LIST
, используя параметризованный? Например,
@parameterized.expand(MyTest().setUpClass().MYLIST):
def test_mytest(self, dict_item):
print(dict_item.items())
Результаты в AttributeError: 'NoneType' object has no attribute 'MYLIST'
.
Вы можете это сделать. В вашем случае:
class MyTest(TestCase):
@classmethod
def setUpClass(cls):
... # your staff
cls.MY_LIST = [...]
super().setUpClass()
return cls
Использовать в тестах:
@parameterized.expand(MyTest.setUpClass().MYLIST):
def test_mytest(self, dict_item):
... # your test staff
Не забывайте, classmethod
вы можете вызывать с помощью класса. Вам не нужен экземпляр.
Думаю, проблема в том, что вы вызываете setUpClass для добавления свойства MY_LIST, но setUpClass ничего не возвращает. Поэтому вы можете поступить следующим образом:
MyTest.setUpClass()
@parameterized.expand(MyTest.MYLIST):
def test_mytest(self, dict_item):
... # your test staff
или:
class MyTest(TestCase):
@classmethod
def setUpClass(cls):
myobj = MyModel.objects.create()
cls.MY_LIST = [
({ 'key1': {'a': myobj.id, 'b': 2}},),
({ 'key2': {'a': myobj.id, 'b': 2}},),
]
return cls
@parameterized.expand(MyTest().setUpClass().MYLIST):
def test_mytest(self, dict_item):
print(dict_item.items())