как добится того чтобы деструктор __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