Как настроить требования к среде для интеграционных тестов в golang?

#go #integration-testing

#Вперед #интеграция-тестирование

Вопрос:

Я новичок в golang, и у меня запущены два небольших проекта, где я столкнулся с той же проблемой.

Один использует базу данных MySQL в качестве хранилища данных, а другой elasticsearch. Как я могу написать тесты, которые охватывают код для этого.

Сначала я использовал HashMapDatastore, но при этом я могу тестировать только свои обработчики и бизнес-логику, но не уровень сохраняемости (например, если сохранение и извлечение работают так, как я ожидаю в elasticsearch) (он же интеграционный тест).

Итак, я должен проверить, есть ли пустая база данных для тестирования? Как я должен удалять эту базу данных после каждого теста? Я нашел подход к этому в интеграционных тестах docker / libcompose, но он относительно сложный.

Существует ли общий подход к этому? Тестирование, если есть elasticsearch с пустым индексом, и если нет, проваливает тесты с хорошим setupmessage?

Спасибо

Комментарии:

1. Для SQL я использую такие инструменты: github.com/DATA-DOG/go-sqlmock , может быть, это может вам помочь

2. Спасибо, но это не проверяет, например, действительна ли и работает ли моя схема базы данных. Например. сложный ВЫБОР или тестирование схемы elasticsearch. Большинство преимуществ go-sqlmock в том, что мне не нужно писать свой MapDatastore самостоятельно. Это очень приятно, но не помогает мне с моей проблемой интеграции, не так ли?

3. Вы говорите об интеграционных тестах. Docker удобен тем, что вы можете docker rm в любое время сбросить его. Я использую Docker для тестирования моей интеграции с Elasticsearch в своих тестах.

4. Просто запускайте новый docker в каждом сеансе тестирования с правильным импортом базы данных. Если у вас есть надлежащая практика миграции, вы можете проверять свою схему в каждом сеансе тестирования. Я бы использовал Makefile для хранения кода настройки docker.

5. Итак, вы бы предложили поместить настройки docker и go test в Makefile и позволить тестам завершиться неудачей, если кто-то просто запускает тесты, не запуская mysql docker? Или я должен использовать библиотеку go docker для запуска контейнера docker с сервером MySQL в тестовом коде? (Что приводит к более простому API, но что мне делать, если нет доступного docker?)