从pytest固定装置产生的调用函数

时间:2019-02-05 19:02:21

标签: python pytest

在单元测试中,我有两个非常相似的固定装置,我希望将某些功能分解为某种辅助功能。考虑到我对yield如何产生发生器的理解,我认为这不会引起任何问题。 my_fixture_with_helper,应该只返回`fixture_helper生成的生成器。

import pytest


def fixture_helper():
    print("Initialized from the helper...")
    yield 26
    print("Tearing down after the helper...")


@pytest.fixture
def my_fixture_with_helper():
    return fixture_helper()


@pytest.fixture
def my_fixture():
    print("Initialized from the fixture...")
    yield 26
    print("Tearing down after the fixture...")


def test_nohelper(my_fixture):
    pass


def test_helper(my_fixture_with_helper):
    pass

但是,如果我运行pytest --capture=no,则会得到以下信息

test_foo.py Initialized from the fixture...
.Tearing down after the fixture...
.

我希望打印“从助手中初始化”和“在助手中拆除”,但是没有,而且我也不知道为什么。为什么这不起作用?

1 个答案:

答案 0 :(得分:3)

您需要使用yield from才能正确通过生成器。否则,将返回生成器对象,pytest无法将其识别为生成器。

@pytest.fixture
def my_fixture_with_helper():
    yield from fixture_helper()

有关yield from的更多信息,请访问this stackoverflow post.