Sobes.tech
Назад к вопросам
Senior
6

Как добавить очищение списка после завершения теста? В чем разница между yield и AdFinalizer?

Компании, где спрашивали
OZONOZON

Ответ от нейросети

sobes.tech 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 — для более сложных сценариев с несколькими финализаторами.