У меня есть пара приборов для тестирования функции с входами xy.Один генерирует значения x, другой - значения y.Тест зависит от обоих.Значения y также зависят от значений x.Вот сводка настроек:
import pytest
@pytest.fixture(params=['a', 'b', 'c'])
def x_data(request):
return request.param
@pytest.fixture(params=['1', '2', '3'])
def y_data(request, x_data):
return request.param + x_data
def test_mathfunc(x_data, y_data):
print(f'\nTesting {x_data} vs {y_data}', end='')
Когда я запускаю это с pytest -s
, выполняется ровно 9 тестов, и распечатка в test_func
показывает, что x_data
передается вtest всегда совпадает с тем, который использовался для генерации y_data
(что, разумеется, мне и нужно):
Testing a vs 1a.
Testing a vs 2a.
Testing a vs 3a.
Testing b vs 1b.
Testing b vs 2b.
Testing b vs 3b.
Testing c vs 1c.
Testing c vs 2c.
Testing c vs 3c.
Я осознаю тот факт, что pytest кэширует результаты фикстуры и пытаетсяОцените светильники минимально возможное количество раз.Для этого простого случая это будет означать, что поведение достаточно надежное.
Вопрос в том, могу ли я действительно полагаться на это поведение?Есть ли ситуация, в которой мне не хватает, когда тест может вызвать вызов, например, a, 3c
?