我想做这样的事情
def foo_bar(a, b):
""" The function I want to test """
return ...
def subparams(a):
return [some stuff based on what a is]
@pytest.fixture(scope='module', params=('foo', 'bar'))
def a(request):
# lengthy setup based on request.param
yield request.param
# teardown
@pytest.fixture(params=subparams(a))
def b(request):
return request.param
def test_foo_bar(a, b):
result = foo_bar(a, b)
assert <something about result>
换句话说,我有一个参数化的夹具a
,只需要它
正常的参数列表。对于a
的每个值,我也有一个函数
subparams
用于生成相关参数b
。为了论证,让我们说subparams
按照以下方式实施
def subparams(a):
return [1, 2, 3] if a == 'foo' else [4, 5]
在这种情况下,我希望使用以下内容调用test_foo_bar
:
'foo', 1
'foo', 2
'foo', 3
'bar', 4
'bar', 5
不幸的是,@pytest.fixture(params=subparams(a))
位不起作用,因为此时a
仍然只是一个函数,而不是基于a
参数化的实例化。我如何实现test_foo_bar
调用a
和b
这些a
需要很长时间才能设置的组合的效果(因此{{1}根据{{1}}?
scope='module'