Senior
69
Kako dodati čišćenje liste nakon završetka testa? Koja je razlika između yield i AdFinalizer?
Компаније где су питане
Одговор од АИ
sobes.tech АИ
В тестировании на 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 — для более сложных сценариев с несколькими финализаторами.