使用 pytest.fixture 时不执行测试
Test is not executed when pytest.fixture is used
我有一个简单的 Python 库,为此我使用以下命令来 运行 测试:
python setup.py pytest
以下测试按预期工作:
def test_out():
assert 1 == 2
测试结果:
platform linux -- Python 3.10.4, pytest-7.1.2, pluggy-1.0.0
rootdir: /media/drive2/src
collected 1 item
tests/test_error.py F
但是添加@pytest.fixture
时,测试没有执行:
import pytest
@pytest.fixture
def test_out():
assert 1 == 2
测试结果:
platform linux -- Python 3.10.4, pytest-7.1.2, pluggy-1.0.0
rootdir: /media/drive2/src
collected 0 items
此行为的原因是什么,如何添加 @pytest.fixture
才能不妨碍测试 运行ning?
(我想使用capsys.readouterr()
,所以我认为需要@pytest.fixture
。)
首先,pytest.fixture
是一个装饰器,所以影响下面的功能,正确的使用方法是把它们放在一起(中间不能有空行),像这样:
import pytest
@pytest.fixture
def test_out():
assert 1 == 2 # This still makes no sense, see answer below
@pytest.fixture
只是表示修饰函数的 return 值将被用作其他测试函数的参数。 (装饰函数不会运行作为测试)。
“Fixtures”, in the literal sense, are each of the arrange steps and data. They’re everything that test needs to do its thing.
这是一个类似于您使用夹具进行测试的示例:
import pytest
@pytest.fixture
def my_number():
return 2
def test_out(my_number):
assert 1 == my_number # This will fail
当您创建夹具时 my_number
返回的值可以用作其他测试函数的参数(在本例中为 test_out
)。
当您必须在多个测试中创建相同的东西时,这很有用。您可以制作一个夹具,而不是在每个测试中重复代码。
我有一个简单的 Python 库,为此我使用以下命令来 运行 测试:
python setup.py pytest
以下测试按预期工作:
def test_out():
assert 1 == 2
测试结果:
platform linux -- Python 3.10.4, pytest-7.1.2, pluggy-1.0.0
rootdir: /media/drive2/src
collected 1 item
tests/test_error.py F
但是添加@pytest.fixture
时,测试没有执行:
import pytest
@pytest.fixture
def test_out():
assert 1 == 2
测试结果:
platform linux -- Python 3.10.4, pytest-7.1.2, pluggy-1.0.0
rootdir: /media/drive2/src
collected 0 items
此行为的原因是什么,如何添加 @pytest.fixture
才能不妨碍测试 运行ning?
(我想使用capsys.readouterr()
,所以我认为需要@pytest.fixture
。)
首先,pytest.fixture
是一个装饰器,所以影响下面的功能,正确的使用方法是把它们放在一起(中间不能有空行),像这样:
import pytest
@pytest.fixture
def test_out():
assert 1 == 2 # This still makes no sense, see answer below
@pytest.fixture
只是表示修饰函数的 return 值将被用作其他测试函数的参数。 (装饰函数不会运行作为测试)。
“Fixtures”, in the literal sense, are each of the arrange steps and data. They’re everything that test needs to do its thing.
这是一个类似于您使用夹具进行测试的示例:
import pytest
@pytest.fixture
def my_number():
return 2
def test_out(my_number):
assert 1 == my_number # This will fail
当您创建夹具时 my_number
返回的值可以用作其他测试函数的参数(在本例中为 test_out
)。
当您必须在多个测试中创建相同的东西时,这很有用。您可以制作一个夹具,而不是在每个测试中重复代码。