Использование параметризации для Аргументов ключевых слов в pytest
Я изучаю pytest и пытаюсь использовать pytest.отметка.параметризация для Аргументов ключевых слов.
Это простой пример без pytest.отметка.параметризация:
G = 10
H = 2
def f(g=G, h=H):
return 5 * g + h
def test_f1():
assert f(h=4) == 54
assert f(g=20) == 102
И это один из моих неудачных маршрутов с использованием pytest.отметка.параметризовать. Это не работает, но помогает понять, чего я хотел бы достичь:
import pytest
G = 10
H = 2
def f(g=G, h=H):
return 5 * g + h
@pytest.mark.parametrize("arg, expected", [
("h=4", 54),
("g=20", 102),
])
def test_f2(arg, expected):
assert f(eval(arg)) == expected
1 ответ:
Функция
f
принимает аргументы ключевых слов, поэтому вам нужно назначить параметры теста ключевым словам. К счастью, Python предоставляет очень удобный способ передачи аргументов ключевых слов в функцию...словарь:d = {'h': 4} f(**d)
Префикс
**
Передd
будет "распаковывать" словарь, передавая каждую пару ключ/значение в качестве ключевого аргумента функции.Для вашего примера
pytest
это означает, что вам просто нужно заменить строковый параметр словарем, аeval
вtest_f2
с помощью ключевое слово unpacker:@pytest.mark.parametrize("arg,expected", [ ({'h':4}, 54), ({'g':20}, 102), ]) def test_f2(arg, expected): assert f(**arg) == expected