Про тесты: In-Memory Database, паттерн Repository и пр.
От: Shmj Ниоткуда  
Дата: 12.11.21 00:31
Оценка:
Такой вопрос.

Как вы тестируете сервисы, которые используют базу данных?

Обязательно ли в тестовой версии используете In-Memory Database или же предпочитаете создать тестовую базу (в рамках такой же СУБД, как в продакшене, только на тестовом сервере) и потом удалить?

Или же делаете прослойку, типа паттерн Repository, чтобы вообще абстрагироваться от базы данных и подсовывать заранее заготовленные данные в коде, вместо использования DB?
Отредактировано 12.11.2021 0:32 Shmj . Предыдущая версия .
Re: Про тесты: In-Memory Database, паттерн Repository и пр.
От: vaa  
Дата: 12.11.21 02:35
Оценка: 3 (1)
Здравствуйте, Shmj, Вы писали:


S> или же предпочитаете создать тестовую базу (в рамках такой же СУБД, как в продакшене, только на тестовом сервере) и потом удалить?


https://nbomber.com/
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Про тесты: In-Memory Database, паттерн Repository и пр.
От: rosencrantz США  
Дата: 13.11.21 18:08
Оценка: 160 (3) +1
Здравствуйте, Shmj, Вы писали:

S>Такой вопрос.


S>Как вы тестируете сервисы, которые используют базу данных?


S>Обязательно ли в тестовой версии используете In-Memory Database или же предпочитаете создать тестовую базу (в рамках такой же СУБД, как в продакшене, только на тестовом сервере) и потом удалить?


Использую настолько настоящую СУБД, насколько возможно. Это осознанное решение после нескольких попыток использовать "более лёгкую" СУБД для тестов — в какой-то момент разница между настоящей и ненастоящей СУБД начинает быть заметной. Например Mysql — настоящая и Sqlite для тестов. Может показаться, что если "через ORM", то и не важно что там за СУБД. Но нет, в какой-то момент эта разница вылезет и пойдёт код if (sqlite) then ... Обобщу мой опыт так: каждый раз когда делал "полегковеснее", рано или поздно начиналось расхождение; каждый раз когда делал по-честному радовался насколько всё предсказуемо.

S>Или же делаете прослойку, типа паттерн Repository, чтобы вообще абстрагироваться от базы данных и подсовывать заранее заготовленные данные в коде, вместо использования DB?


Это совершенно другой вопрос — сначала нужно определиться что вы хотите тестировать и зачем. Взять и вот так вот исключить работу с базой из тестирования наверно в каких-то ситуациях может иметь смысл
Автор: rosencrantz
Дата: 07.11.21
, но это точно ни разу не подход по умолчанию.
Re: Про тесты: In-Memory Database, паттерн Repository и пр.
От: Ночной Смотрящий Россия  
Дата: 14.11.21 11:43
Оценка: 6 (1)
Здравствуйте, Shmj, Вы писали:

S>Как вы тестируете сервисы, которые используют базу данных?


При помощи БД.

S>Обязательно ли в тестовой версии используете In-Memory Database или же предпочитаете создать тестовую базу (в рамках такой же СУБД, как в продакшене, только на тестовом сервере) и потом удалить?


Используем реальные БД, причем все которые поддерживаем, прогоняя тесты на всех.

S>Или же делаете прослойку, типа паттерн Repository, чтобы вообще абстрагироваться от базы данных


Это слишком дорого (по сравнению с поднятием приложения в WebAppFactory прям в том виде, в котором оно живет на проде), хотя в определенных ситуациях вполне рабочая практика. Но она все равно не освобождает от тестирования самого repository на реальных БД.

В целом, конечно, следует предпочитать моки реальным внешним сервисам, ибо иначе стоимость тестового окружения быстро начнет достигать фантастических величин (у нас в какой то омент было в районе 2М евро в год). Но БД это отдельный разговор, который на данный момент нормально не мокается. Максимум что тут можно мокнуть — создавать специальный тестовый инстанс БД, и наполнять его предопределенными данными из скриптов.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.