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
yieldolvashatóbb és modernabb módja a setup/teardown szervezésének fixture-eken belül. - Az
addfinalizerlehető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.