【发布时间】:2020-11-27 09:28:21
【问题描述】:
我有两个装置 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() 实例的夹具)作为参数并测试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 在每个时间点都具有相同的参数时才有意义,即A 不能有request.param = 1,而B 有request.param = 2。这些变量不打算在程序中以其他方式使用,如果它们被测试的代码会中断。
有没有办法在夹具之间共享或同步参数化?或者以某种方式重新设计代码,使其不成问题?谢谢!
【问题讨论】:
标签: python unit-testing testing pytest code-organization