如何在Pytest中规避非所谓的夹具?

时间:2016-03-14 05:14:55

标签: python pytest

Pytest套件具有很棒的灯具功能。 为了制作可重复使用的夹具,我们用特殊的装饰器标记一个函数:

@pytest.fixture
def fix():
    return {...}

以后可以通过与灯具原始名称相匹配的参数名称在我们的测试中使用:

def test_me(fix):
    fix['field'] = 'expected'
    assert(fix['field'] == 'expected')

虽然我们有时会忘记在参数中指定fixture,并且由于工厂名称与生成的对象的名称相匹配,因此测试将默默地将更改应用于工厂对象本身:

def test_me():  # notice no arg
    fix['this is'] = 'a hell to debug'

当然,结果是不可取的。例如,能够为工厂函数添加一些后缀会很好,但是pytest.fixture装饰器显然没有办法覆盖灯具的名称。 任何其他建议也足够了。

保护自己免受此类问题的推荐技术是什么?

1 个答案:

答案 0 :(得分:1)

您可以在定义夹具时使用autouse=True,以在每次夹具范围开始时调用夹具。 pytest 2.0中添加了此功能。 例如:

import pytest
@pytest.fixture(scope='function',autouse=True)
def fixture_a():
    return 5

def test_a():
    assert fixture_a == 5

如您所见,我不必在测试_a中将fixture声明为参数来访问它。

文档:https://docs.pytest.org/en/latest/reference.html#pytest-fixture

代码示例:https://docs.pytest.org/en/latest/fixture.html#autouse-fixtures-xunit-setup-on-steroids