Senior
Kuidas lisada nimekirja puhastamine pärast testi lõpetamist? Milline on erinevus yield ja AdFinalizer vahel?
sobes.tech AI
Vastus AI-lt
Pythonis pytest kasutades ressursside puhastamiseks pärast testi, kasutatakse sageli konstruktsiooni yield fixture'ides. Kood enne yield täidetakse enne testi, ja pärast yield — pärast testi, mis on mugav näiteks nimekirja puhastamiseks.
Näide fixture'ist nimekirja puhastamisega:
import pytest
@pytest.fixture
def my_list():
lst = [1, 2, 3]
yield lst
lst.clear() # Puhastamine pärast testi
AdFinalizer on pytest meetod, mis võimaldab lisada puhastamise funktsiooni, mida kutsutakse pärast testi. Seda saab kasutada fixture'is request.addfinalizer(cleanup_func) kaudu.
Erinevused yield ja addfinalizer vahel:
yieldon loetavam ja kaasaegsem viis setup/teardown korraldamiseks fixture'ides.addfinalizervõimaldab dünaamiliselt lisada mitu puhastamise funktsiooni.
Näide addfinalizer-iga:
import pytest
def cleanup():
print("Puhastamine pärast testi")
@pytest.fixture
def my_resource(request):
# setup
request.addfinalizer(cleanup)
return some_resource
Üldiselt eelistatakse yield lihtsate juhtumite puhul, addfinalizer-it keerulisemate stsenaariumide jaoks, kus on mitu finaliseerijat.