私はpytestを学んでいて、コードをpylintでリントします。しかし、pylintはまだ以下について不満を述べています。W0621: Redefining name %r from outer scope (line %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
。
フィクスチャを関数と同じファイルに保持する場合のベストプラクティスは何ですか?
_
?pylint
チェックを無効にしますか?テストファイルでそのルールを無効にしました。
# pylint: disable=redefined-outer-name
# ^^^ this
import pytest
@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
_@pytest.fixture
_の pytest docs は次のように言います:
フィクスチャが定義されているのと同じモジュールでフィクスチャが使用されている場合、フィクスチャの関数名は、フィクスチャを要求する関数argによって隠されます。これを解決する1つの方法は、装飾された関数に_
fixture_<fixturename>
_という名前を付けてから、@pytest.fixture(name='<fixturename>')
を使用することです。
したがって、このソリューションは、pytestの作成者がフィクスチャ関数のややわかりやすい名前を提案することを除いて、オプション1と同様です。
ドキュメントの説明は、フィクスチャを_conftest.py
_に移動して、フィクスチャを使用するテストコードと同じモジュール内にないようにする別のソリューションを示唆しています。この場所は、テストモジュール間でフィクスチャを共有する場合にも役立ちます。
いくつかの問題を修正しようとした pylint-pytest プラグインがあります。しかし、エラーW0621
はまだ修正されておらず、プラグインは破棄されているようです(最後の更新は2013年でした)。