Sobes.tech
Senior

Тесті аяқталғаннан кейін тізімді тазалауды қалай қосуға болады? yield пен AdFinalizer арасындағы айырмашылық қандай?

sobes.tech AI

AI-дан жауап

Python-да тестілеу кезінде pytest пайдаланып, тесттен кейін ресурстарды тазалау үшін жиі фикстураларда yield құрылымы қолданылады. yield-ке дейінгі код тестке дейін орындалады, ал yield-тен кейінгісі — тесттен кейін, мысалы, тізімді тазалау үшін ыңғайлы.

Тізімді тазалау үшін фикстураның мысалы:

import pytest

@pytest.fixture
def my_list():
    lst = [1, 2, 3]
    yield lst
    lst.clear()  # Тазалау тесттен кейін

AdFinalizer — pytest-те қолданылатын әдіс, ол тесттен кейін шақырылатын тазалау функциясын қосуға мүмкіндік береді. Оны фикстура ішінде request.addfinalizer(cleanup_func) арқылы қолдануға болады.

yield пен addfinalizer арасындағы айырмашылық:

  • yield — фикстураларда setup/teardown ұйымдастырудың оқылуы жеңіл әрі заманауи тәсілі.
  • addfinalizer — бірнеше тазалау функцияларын динамикалық түрде қосуға мүмкіндік береді.

addfinalizer-мен мысал:

import pytest

def cleanup():
    print("Тазалау тесттен кейін")

@pytest.fixture
def my_resource(request):
    # setup
    request.addfinalizer(cleanup)
    return some_resource

Жалпы алғанда, yield қарапайым жағдайлар үшін артықшылықты, ал addfinalizer — бірнеше финализаторлармен күрделі сценарийлер үшін қолайлы.