创建以编程方式依赖另一个的pytest固定装置

时间:2019-02-20 10:02:34

标签: python pytest fixtures

我有成对的固定装置,特别是一个给我一个上下文管理器功能的夹具,另一个直接进入那个上下文的夹具:

import pytest
from contextlib import contextmanager


@pytest.fixture
def create_context():
    @contextmanager
    def context():
        ctx = {
            'active': True,
        }
        yield ctx
        ctx['active'] = False

    return context


@pytest.fixture
def context(create_context):
    with create_context() as ctx:
        yield ctx


def test_using_create_context(create_context):
    with create_context() as context:
        assert context['active']
    assert not context['active']


def test_using_context(context):
    assert context['active']
  • 为了能够测试退出上下文后发生的情况,context固定装置还不够
  • 有时候我不在乎,我希望只使用context

我有create_foo_context / foo_context对中的多个灯具,而后者总是取决于前者,即需要一个名为create_foo_context的参数。

我想要做的是这样的事情:

context = context_fixture(create_context)

而不是编写第二个固定装置或类似的东西。 This blog post展示了如何动态创建灯具,但它们都仅取决于静态已知的灯具。

因此,如何编写我的context_fixture函数,以便生成的灯具依赖于具有任意名称的灯具?

0 个答案:

没有答案