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 — бірнеше финализаторлармен күрделі сценарийлер үшін қолайлы.