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

  • yield je prehľadnejší a modernejší spôsob organizácie setup/teardown vo fixture-och.
  • addfinalizer umožň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.