как добится того чтобы деструктор __del__ отрабатывал при стутасе теста fail

в моих тестах мне понадобился деструктор который проводит определенные манипуляции с тестовыми данными по окончании теста. Проблема заключается в том, что он падает в случае если тест падает

ImportError: sys.meta_path is None, Python is likely shutting down

т.е. интерпритатор заканчивает свою работу до вызова del можно ли как-то решить данную проблему?


Ответы (1 шт):

Автор решения: Roman Konoval

Проблема с __del__ такая, что в принципе не гарантируется его вызов. Там нельзя ничего критичного делать, для инициализации/очистки нужно использовать другие подходы, и в pytest, в частности, есть свои основанные на fixtures.

Для инициализации объекта, который нужен тесту создайте fixture:

@pytest.fixture
def my_test_object():
    try:
       obj = ...  # создаем объект как-то
       yield obj  # здесь будет вызван тест
    finally:
       # тут делаем очистку

И используем теперь в тесте:

def test_something(my_test_object):
   # используем тут my_test_object
→ Ссылка