Выбор ответа Senior Тестирование и pytest обновлено
Изоляция тестов с базой данных
Вопрос
Как обычно изолируют интеграционные тесты с настоящей PostgreSQL, чтобы они не влияли друг на друга и были быстрыми?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Тест в транзакции с откатом, схема одна на сессию. Откат транзакции после теста почти бесплатен и возвращает базу в исходное состояние, а миграции и схема создаются один раз.
Варианты ответа
- Каждый тест создаёт новую базу данных с нуля
- Тесты запускаются строго последовательно в заданном порядке
- Используют SQLite в памяти вместо PostgreSQL
- Тест в транзакции с откатом, схема одна на сессиюправильный ответ
Разбор
Откат транзакции после теста почти бесплатен и возвращает базу в исходное состояние, а миграции и схема создаются один раз. Так делают pytest-django и типичные фикстуры для SQLAlchemy. Новая база на тест слишком медленная, зависимость от порядка запрещена, а SQLite отличается от PostgreSQL поведением (типы, блокировки, JSON), и тесты пропустят настоящие ошибки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.