@700ghz

Нужно ли очищать БД перед каждым тестом (TDD/BDD)?

Всем привет! :)
Я пишу тесты для API. Тесты делают HTTP запрос к эндпоинтам и проверяют ответ.
Я слышал что каждый тест должен быть изолированным.
1. Значит ли это что мне нужно очищать базу данных после каждого теста?
2. Как лучше заполнять базу данных: вызывать функцию заполнитьБдТестовымиЗаписями() (функция заполняет сразу все таблицы какими-то текстовыми записями) перед каждым тестом? Или не заполнять сразу всю базу данных, а создавать только необходимые записи (например пару юзеров) прямо внутри теста?
3. Правда ли что тестовая БД должна храниться именно в memory? (не в файле, как обычная БД) (то есть использовать sqlite для тестов, вместо mysql)

Заранее благодарю!
  • Вопрос задан
  • 157 просмотров
Решения вопроса 2
sim3x
@sim3x
1. Значит ли это что мне нужно очищать базу данных после каждого теста?
да

2. Как лучше заполнять базу данных: вызывать функцию заполнитьБдТестовымиЗаписями() (функция заполняет сразу все таблицы какими-то текстовыми записями) перед каждым тестом? Или не заполнять сразу всю базу данных, а создавать только необходимые записи (например пару юзеров) прямо внутри теста?
создавать только необходимые записи (например пару юзеров) прямо внутри теста

3. Правда ли что тестовая БД должна храниться именно в memory? (не в файле, как обычная БД) (то есть использовать sqlite для тестов, вместо mysql)
желательно, но не обязательно.
"Финальные" тесты должны проходить на софте и окружении, который будет на продакшене.
Также желательно провести тесты еще раз не на пусстой базе, а на обезличенных данных с реального проекта

Разберитесь в различиях функциональных/приемочных тестов и юнит-тестов
Ответ написан
angrySCV
@angrySCV
machine learning, programming, startuping
много идеологических вопросов, что именно и зачем тестируете.
несколько уровней тестирования, обычно при ТДД разработке требуется быстрая обратная связь с тестами, и тестируют исключительно ту функциональность которую разрабатывают, без тестирование зависимостей в виде баз данных и тд, для этого используют разного рода заглушки (в виде мокапа).
тоесть базу данных вообще не используют.
В конце разработки, все равно прогоняются "интеграционные" тесты, по всему сервису, чтоб посмотреть работу сервиса в целом, включая все его части, тогда используется максимально идентичное окружение, что и как на продакшене, по возможности даже используя примерно такую-же БД что и на продакшене. База данных в памяти уже не соответствует этому требованию, может случится так, что например разница в задержках между тем как отрабатывало в памяти и как отрабатывает в реальности будет сильно отличатся, и приведет к неожиданному поведению.
ну и да на каждый такой интеграционный тест базу заново перезаписывают и заполняют темеже самыми данными что и ранее (мы же обычно в тестах проверяем соответствие исходным данным, потом проверяем например изменение этих данных, поэтому без отката этих данных назад, повторить теже самые тесты не получится)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы