Как передать dict в модульный тест с помощью параметризации?
У меня есть список dicts:
MY_LIST = [
{ 'key1': {'a': 1, 'b':2 } },
{ 'key2': {'a': 1, 'b':2 } }
]
Как передать dict в модульный тест django, используя parameterized? Например.
@parameterized.expand(MY_LIST):
def test_mytest(self, dict_item):
print(dict_item.items())
Результат AttributeError: 'str' object has no attribute 'items'
, поскольку dict преобразуется в строку.
Как указано в документации:
The @parameterized and @parameterized.expand decorators accept a list or iterable of tuples or param(...), or a callable which returns a list or iterable
Так что я бы попытался преобразовать MY_LIST
в:
MY_LIST = [
({ 'key1': {'a': 1, 'b': 2}},),
({ 'key2': {'a': 1, 'b': 2}},),
]
Что делает его списком кортежей, содержащих один параметр, который нужно применить к тестируемому методу.
Вместо этого вы можете создать NamedTuple, чтобы дать параметрам ключи
from typing import NamedTuple
class TestParameters(NamedTuple):
firstParam: str
secondParam: int
@parameterized.expand([TestParameters(
firstParam="firstParam",
secondParam="secondParam"
)
]
def test(self, firstParam, secondParam):
...
Если вам нужен диктант по другой причине, вы также можете сделать это
@parameterized.expand([TestParameters(
firstParam="firstParam",
secondParam="secondParam"
)
]
def test(self, *args):
test_params = TestParams(*args)._asdict()