В приложении есть пакет
repo который содержит несколько интерфейсов - там описаны все необходимые для приложения методы. Далее есть различные пакеты (адаптеры) реализующие `repo` для разных баз данных:
repo/mongodb,
repo/redis,
repo/sqlite.
Структура на фс такая:
- repo
- repo/mongodb
- repo/redis
- repo/sqlite
Проблема в том что эти адаптеры имеют одни и те же методы, делают одно и тоже (но по своему), и тестирование для них будет тоже — одинаковое. Очень затратно к каждому адаптеру подходить с тестами индивидуально, там всё идентично получается: и множество подготовленных фикстур и куча ассертов на каждый реализованный метод. Различаются только инициализацией перед тестом (создание баз и прочее) и зачисткой после тестов (удаление что насоздавали). Если делать в лоб то по сути будет ctrl+c - ctrl+v, а потом ещё меинтейнить всё это...
Было бы удобно создать хелпер в
repo, который тупо проверял все адаптеры по одному алгоритму, но тут проблема с цикличным импортом (все адаптеры импортируют компоненты из repo). Можно хелпер в отдельный пакет унести
repo/internal, но тогда всё что относится к инициализацией перед тестом и зачисткой после тестов, в адаптерах, надо делать доступным для других пакетов. А там тогда потянется и testing в сборку (используется для ассертов в инициализации и зачистки).
Вот и думаю
1) как же так распихать что бы в адапетрах писать только инициалзацию перед тестом и зачистку после тестов?
2) как в одном месте прогонять тесты по всем адамптерам?
3) как оставить всё тестовое в
*_test.go файлах и не мусорить хелперами для тестов в коде адаптеров?
4) как сделать что бы не тянуть пакет testing и прочее тестовое в конечную сборку?
Тестов уже и так много, каждый раз переиначивать - будет сложно. Может кто занимался организацией тестов для таких условий? Или есть ссылка на доку по такому случаю (гуглится всё мимо)?