Senior
Kaip pridėti sąrašo valymą po testo pabaigos? Kuo skiriasi yield ir AdFinalizer?
sobes.tech AI
Atsakymas iš AI
Testuose Python su pytest, norint po testo išvalyti išteklius, dažnai naudojama konstrukcija su yield fixture'ose. Kodas prieš yield vykdomas prieš testą, o po yield — po testo, kas patogu, pavyzdžiui, išvardijimui išvalyti.
Pavyzdys fixture su išvardijimo išvalymu:
import pytest
@pytest.fixture
def my_list():
lst = [1, 2, 3]
yield lst
lst.clear() # Išvalymas po testo
AdFinalizer yra pytest metodas, leidžiantis pridėti išvalymo funkciją, kuri bus iškviesta po testo. Jį galima naudoti fixture viduje per request.addfinalizer(cleanup_func).
Skirtumai tarp yield ir addfinalizer:
yieldyra skaitomesnis ir modernesnis būdas organizuoti setup/teardown fixture'ose.addfinalizerleidžia dinamiškai pridėti kelias išvalymo funkcijas.
Pavyzdys su addfinalizer:
import pytest
def cleanup():
print("Po testo išvalymas")
@pytest.fixture
def my_resource(request):
# setup
request.addfinalizer(cleanup)
return some_resource
Apskritai, yield yra pageidautinas paprastiems atvejams, o addfinalizer — sudėtingesniems scenarijams su keliomis pabaigos funkcijomis.