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):
# танзимот
request.addfinalizer(cleanup)
return some_resource
Дар умум, yield барои ҳолатҳои оддӣ беҳтар аст, addfinalizer — барои сценарияҳои мураккаб бо чанд финализатор.