Ошибка «непрямой фиксации» при использовании pytest. Что не так? - PullRequest
0 голосов
/ 05 апреля 2020
 def fatorial(n):
    if n <= 1:
        return 1
    else:
        return n*fatorial(n - 1)


import pytest

@pytest.mark.parametrize("entrada","esperado",[
    (0,1),
    (1,1),
    (2,2),
    (3,6),
    (4,24),
    (5,120)
])

def testa_fatorial(entrada,esperado):
    assert fatorial(entrada)  == esperado

Ошибка:

 ERROR collecting Fatorial_pytest.py ____________________________________________________________________
In testa_fatorial: indirect fixture '(0, 1)' doesn't exist

Я не знаю, почему я получил «косвенный фиксатор». Любая идея? Я использую python 3.7 и windows 10 64 бит.

1 Ответ

2 голосов
/ 05 апреля 2020

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
...