2

我想传递的@pytest.mark.parametrize不是特定的值,而是固定装置。像这样。

给定一个conftest:

@pytest.fixture
def name1():
    return 'foo'

@pytest.fixture
def name2():
    return 'bar'

在我的 test.py 中,这当然有效:

@pytest.mark.parametrize('name', ['foo', 'bar', 'baz'])
def test_name(name):
    print(name)

这不会:

 @pytest.mark.parametrize('name', [name1, name2])
 def test_name(name):
     print(name)

我知道,在这种微不足道的情况下,我可以只创建一个名称夹具并将夹具参数化,但在某些情况下这是不可取的。

我发现的一种解决方法是使用pytest_factoryboy's LazyFixture。但是,我经常无法在我的测试中访问lazyfixtures 属性。

4

1 回答 1

4

我会坚持对夹具进行参数化

在您的示例中,这相当于:

@pytest.fixture(params=['foo', 'bar'])
def name(request):
    return request.param

def test_name(name):
    print(name)

另一种选择:

@pytest.fixture(params=[1,2])
def name(name1, name2, request):
    if request.param == 1:
        return name1()
    elif request.param == 2:
        return name2()

def test_name(name):
    print(name)

哪种方法最适合您将取决于您的测试的具体情况,也许还取决于您可能试图利用的预先存在的固定装置。

于 2016-01-11T21:20:55.603 回答