Как передать 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()
Вернуться на верх