pythonpytestpylintfixture

pytest fixtures Redefining name from outer scope [pylint]


I'm learning pytest and I lint my code with pylint. But pylint still complaints about:
W0621: Redefining name %r from outer scope (line %s)

for the following example from 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

Redefining name my_wallet from outer scope.

I found workaround to add _ prefix to the fixture name: _my_wallet.

What would be the best practice if I want to keep fixtures in same file as functions?

  1. Prepend all fixtures with _?
  2. Disable this pylint check for tests?
  3. Better suggestion?

Solution

  • I just disabled that rule in my test files:

    # 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