У меня есть два прибора A
и B
с одним и тем же аргументом params
, переданным в pytest.fixture()
. Кроме того, B
принимает A
в качестве аргумента:
import pytest
@pytest.fixture(params=[1, 2])
def A(request):
if request.param == 1:
# do stuff to get matrix_1
return matrix_1
if request.param == 2:
# do stuff to get matrix_2
return matrix_2
@pytest.fixture(params=[1, 2])
def B(request, A):
if request.param == 1:
# do stuff with A to get matrix_3
return matrix_3
if request.param == 2:
# do stuff with A to get matrix_4
return matrix_4
У меня также есть функция test_method
, которая принимает приборы B
и my_class
(прибор, возвращающий MyClass()
instance) в качестве аргументов и проверяет метод my_class
. Метод принимает B
в качестве аргумента. Я не думаю, что эта информация обязательно имеет значение для вопроса, она здесь только для контекста:
from my_module import MyClass
@pytest.fixture
def my_class():
return MyClass()
def test_method(my_class, B):
# do stuff to get the expected value
actual = my_class.method(B)
assert actual == expected
Проблема в том, что вся конструкция имеет смысл, только если A
и B
имеют одинаковые params в каждый момент времени, т.е. A
не может иметь request.param = 1
, когда B
имеет request.param = 2
. Эти переменные не предназначены для использования в программе иным образом, и тестируемый код ломается, если они используются.
Есть ли способ поделиться или синхронизировать параметризацию между приборами? Или как-то переделать код, чтобы не было проблем? Спасибо!