是否可以将参数传递给夹具?

2024-10-02 02:39:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我说的不是pytest定义的“Fixture参数化”,而是传递给函数(在本例中是Fixture函数)以使代码更模块化的实际参数。在

为了证明,这是我的固定装置

@yield_fixture
def a_fixture(a_dependency):
    do_setup_work()
    yield
    do_teardown_work()
    a_dependency.teardown()

如您所见,我的fixture依赖于a_dependency,它的teardown()也需要被调用。我知道在天真的用例中,我可以这样做:

^{pr2}$

然而,虽然a_fixture代码可以放在中心位置并由所有测试重用,a_dependecy代码是特定于测试的,每个测试可能需要创建一个新的a_dependency对象。在

我想避免将fixture和依赖项复制粘贴到所有测试中。如果这是常规python代码,我可以将a_dependecy作为函数参数传递。如何将此对象传递到共享设备?在


Tags: 对象函数代码参数定义pytestdependencydo
2条回答

在我看来,也许你不希望a_dependency成为一个固定装置,你只想让它成为一个常规函数。你想要这样的东西吗?在

def a_dependency():
    # returns a context manager


@yield_fixture
def a_fixture():
    with a_dependency() as dependency:
        do_setup_work()
        yield
        do_teardown_work()

好吧,好吧,如果a_dependency真的是固定不变的,为什么不能两全其美呢?装饰器毕竟只是语法上的甜点。在

def a_dependency():
    # returns a context manager

a_dependency_fixture = yield_fixture(a_dependency)


@yield_fixture
def a_fixture():
    # here use a_dependency as a regular function
    with a_dependency() as dependency:
        do_setup_work()
        yield
        do_teardown_work()



def test_foo(a_dependency_fixture):
    # here use a_dependency as a fixture
    pass

我没有检查这是否真的有效,因为问题中的信息太笼统了,我无法做出一个有效的案例。如果你能提供更多的细节,那么给出一个更有用的答案可能会更容易。在

相关问题 更多 >

    热门问题