Такой вопрос.
Как вы тестируете сервисы, которые используют базу данных?
Обязательно ли в тестовой версии используете In-Memory Database или же предпочитаете создать тестовую базу (в рамках такой же СУБД, как в продакшене, только на тестовом сервере) и потом удалить?
Или же делаете прослойку, типа паттерн Repository, чтобы вообще абстрагироваться от базы данных и подсовывать заранее заготовленные данные в коде, вместо использования DB?
Здравствуйте, Shmj, Вы писали:
S> или же предпочитаете создать тестовую базу (в рамках такой же СУБД, как в продакшене, только на тестовом сервере) и потом удалить?
https://nbomber.com/
Здравствуйте, Shmj, Вы писали:
S>Такой вопрос.
S>Как вы тестируете сервисы, которые используют базу данных?
S>Обязательно ли в тестовой версии используете In-Memory Database или же предпочитаете создать тестовую базу (в рамках такой же СУБД, как в продакшене, только на тестовом сервере) и потом удалить?
Использую настолько настоящую СУБД, насколько возможно. Это осознанное решение после нескольких попыток использовать "более лёгкую" СУБД для тестов — в какой-то момент разница между настоящей и ненастоящей СУБД начинает быть заметной. Например Mysql — настоящая и Sqlite для тестов. Может показаться, что если "через ORM", то и не важно что там за СУБД. Но нет, в какой-то момент эта разница вылезет и пойдёт код if (sqlite) then ... Обобщу мой опыт так: каждый раз когда делал "полегковеснее", рано или поздно начиналось расхождение; каждый раз когда делал по-честному радовался насколько всё предсказуемо.
S>Или же делаете прослойку, типа паттерн Repository, чтобы вообще абстрагироваться от базы данных и подсовывать заранее заготовленные данные в коде, вместо использования DB?
Это совершенно другой вопрос — сначала нужно определиться что вы хотите тестировать и зачем. Взять и вот так вот исключить работу с базой из тестирования
наверно в каких-то ситуациях может иметь смыслАвтор: rosencrantz
Дата: 07.11.21
, но это точно ни разу не подход по умолчанию.
Здравствуйте, Shmj, Вы писали:
S>Как вы тестируете сервисы, которые используют базу данных?
При помощи БД.
S>Обязательно ли в тестовой версии используете In-Memory Database или же предпочитаете создать тестовую базу (в рамках такой же СУБД, как в продакшене, только на тестовом сервере) и потом удалить?
Используем реальные БД, причем все которые поддерживаем, прогоняя тесты на всех.
S>Или же делаете прослойку, типа паттерн Repository, чтобы вообще абстрагироваться от базы данных
Это слишком дорого (по сравнению с поднятием приложения в WebAppFactory прям в том виде, в котором оно живет на проде), хотя в определенных ситуациях вполне рабочая практика. Но она все равно не освобождает от тестирования самого repository на реальных БД.
В целом, конечно, следует предпочитать моки реальным внешним сервисам, ибо иначе стоимость тестового окружения быстро начнет достигать фантастических величин (у нас в какой то омент было в районе 2М евро в год). Но БД это отдельный разговор, который на данный момент нормально не мокается. Максимум что тут можно мокнуть — создавать специальный тестовый инстанс БД, и наполнять его предопределенными данными из скриптов.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>