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 — за по-сложни сценарии с множество финализатори.