Sobes.tech
Senior

Hogyan adjuk hozzá a lista tisztítását a teszt befejezése után? Mi a különbség a yield és az AdFinalizer között?

sobes.tech MI

Válasz az MI-től

Pythonban pytest használatakor a teszt utáni erőforrások tisztítására gyakran alkalmazzák a yield konstrukciót a fixture-okon belül. A yield előtti kód a teszt előtt fut le, a yield utáni pedig a teszt után, ami kényelmes például egy lista tisztítására.

Lista tisztítási példával rendelkező fixture:

import pytest

@pytest.fixture
def my_list():
    lst = [1, 2, 3]
    yield lst
    lst.clear()  # Tisztítás a teszt után

Az AdFinalizer a pytest-ben egy módszer, amely lehetővé teszi, hogy egy tisztítási függvényt adjunk hozzá, amit a teszt után hívnak meg. Ezt a request.addfinalizer(cleanup_func) segítségével lehet a fixture-ben használni.

A yield és az addfinalizer közötti különbségek:

  • A yield olvashatóbb és modernabb módja a setup/teardown szervezésének fixture-eken belül.
  • Az addfinalizer lehetővé teszi több tisztítási funkció dinamikus hozzáadását.

Az addfinalizer példája:

import pytest

def cleanup():
    print("Tisztítás a teszt után")

@pytest.fixture
def my_resource(request):
    # setup
    request.addfinalizer(cleanup)
    return some_resource

Általánosságban a yield előnyösebb egyszerű esetekben, az addfinalizer pedig összetettebb szcenáriókban, több végrehajtóval.