Sobes.tech
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:

  • yield on loetavam ja kaasaegsem viis setup/teardown korraldamiseks fixture'ides.
  • addfinalizer võ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.