在单元测试中,我有两个非常相似的固定装置,我希望将某些功能分解为某种辅助功能。考虑到我对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...
.
我希望打印“从助手中初始化”和“在助手中拆除”,但是没有,而且我也不知道为什么。为什么这不起作用?
答案 0 :(得分:3)
您需要使用yield from
才能正确通过生成器。否则,将返回生成器对象,pytest
无法将其识别为生成器。
@pytest.fixture
def my_fixture_with_helper():
yield from fixture_helper()
有关yield from
的更多信息,请访问this stackoverflow post.