使用 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 值将被用作其他测试函数的参数。 (装饰函数不会运行作为测试)。

来自pytest documentation

“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)。

当您必须在多个测试中创建相同的东西时,这很有用。您可以制作一个夹具,而不是在每个测试中重复代码。