Senior
Ako pridať vyčistenie zoznamu po dokončení testu? Aký je rozdiel medzi yield a AdFinalizer?
sobes.tech AI
Odpoveď od AI
V testovaní v Pythone s pytestom na čistenie zdrojov po teste sa často používa konštrukcia s yield vo fixture-och. Kód pred yield sa vykoná pred testom, a po yield — po teste, čo je vhodné napríklad na vyčistenie zoznamu.
Príklad fixture s čistením zoznamu:
import pytest
@pytest.fixture
def my_list():
lst = [1, 2, 3]
yield lst
lst.clear() # Čistenie po teste
AdFinalizer je metóda v pytest, ktorá umožňuje pridať funkciu na čistenie, ktorá bude volaná po teste. Môže byť použitá vo vnútri fixture cez request.addfinalizer(cleanup_func).
Rozdiely medzi yield a addfinalizer:
yieldje prehľadnejší a modernejší spôsob organizácie setup/teardown vo fixture-och.addfinalizerumožňuje dynamicky pridávať viacero funkcií na čistenie.
Príklad s addfinalizer:
import pytest
def cleanup():
print("Čistenie po teste")
@pytest.fixture
def my_resource(request):
# setup
request.addfinalizer(cleanup)
return some_resource
Všeobecne je yield preferované pre jednoduché prípady, addfinalizer — pre zložitejšie scenáre s viacerými finalizátormi.