gpt4 book ai didi

python - pytest 装置从外部范围重新定义名称 [pylint]

转载 作者:行者123 更新时间:2023-12-03 03:26:22 27 4
gpt4 key购买 nike

我正在学习 pytest,并使用 pylint 来检查我的代码。但 pylint 仍然提示:
W0621:从外部作用域重新定义名称 %r(第 %s 行)

来自 pytest 的以下示例:

# test_wallet.py

@pytest.fixture
def my_wallet():
'''Returns a Wallet instance with a zero balance'''
return Wallet()

@pytest.mark.parametrize("earned,spent,expected", [
(30, 10, 20),
(20, 2, 18),
])
def test_transactions(my_wallet, earned, spent, expected):
my_wallet.add_cash(earned)
my_wallet.spend_cash(spent)
assert my_wallet.balance == expected

从外部范围重新定义名称 my_wallet

我找到了解决方法,将 _ 前缀添加到装置名称:_my_wallet

如果我想将装置与函数保存在同一文件中,最佳实践是什么?

  1. 在所有灯具前面添加 _
  2. 禁用此 pylint 检查以进行测试?
  3. 更好的建议?

最佳答案

pytest docs对于 @pytest.fixture说这个:

If a fixture is used in the same module in which it is defined, thefunction name of the fixture will be shadowed by the function arg thatrequests the fixture; one way to resolve this is to name the decoratedfunction fixture_<fixturename> and then use@pytest.fixture(name='<fixturename>').

因此,此解决方案与选项 1 类似,只是 pytest 作者建议为 Fixture 函数使用一个更具描述性的名称。因此替换这两行

@pytest.fixture
def my_wallet():

与:

@pytest.fixture(name="my_wallet")
def fixture_my_wallet():

文档中的描述还暗示了另一种解决方案,即将灯具移至 conftest.py因此它们与使用 fixture 的测试代码不在同一模块中。此位置对于在测试模块之间共享固定装置也很有用。

关于python - pytest 装置从外部范围重新定义名称 [pylint],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46089480/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com