TL; DR -
Проблема со строкой
@pytest.mark.parametrize("entrada","esperado",[ ... ])
Она должна быть записана в виде строки через запятую:
@pytest.mark.parametrize("entrada, esperado",[ ... ])
Вы получили indirect fixture
, потому что pytest не смог распаковать указанный argvalues
, так как он получил неверный параметр argnames
. Вы должны убедиться, что все параметры записаны как одна строка.
См. Документацию :
Встроенный декоратор pytest.mark.parametrize позволяет параметризовать аргументы для тестовой функции.
Параметры :
1. argnames - строка через запятую, обозначающая одно или несколько имен аргументов, или список / кортеж строк аргументов.
2. argvalues - Список значений argvalues определяет, как часто тест вызывается с различными значениями аргументов.
То есть вы должны записать аргументы, которые вы хотите параметризовать, как одну строку и разделите их запятыми. Поэтому ваш тест должен выглядеть так:
@pytest.mark.parametrize("n, expected", [
(0, 1),
(1, 1),
(2, 2),
(3, 6),
(4, 24),
(5, 120)
])
def test_factorial(n, expected):
assert factorial(n) == expected