pytest-fixture-finalizer-callback (PT021)
源自 flake8-pytest-style linter。
作用
检查 pytest
fixtures 中不必要的 request.addfinalizer
用法。
为什么这不好?
pytest
提供了两种在 fixture 代码中执行清理的方法。第一种是顺序执行(通过 yield
语句),第二种是基于回调(通过 request.addfinalizer
)。
顺序方法更具可读性,应优先使用,除非 fixture 使用“工厂作为 fixture”模式。
示例
import pytest
@pytest.fixture()
def my_fixture(request):
resource = acquire_resource()
request.addfinalizer(resource.release)
return resource
建议改为
import pytest
@pytest.fixture()
def my_fixture():
resource = acquire_resource()
yield resource
resource.release()
# "factory-as-fixture" pattern
@pytest.fixture()
def my_factory(request):
def create_resource(arg):
resource = acquire_resource(arg)
request.addfinalizer(resource.release)
return resource
return create_resource