Как запускать модульные тесты для кода, который использует службы App Engine в Go?

# #unit-testing #google-app-engine #go

# # #модульное тестирование #google-app-engine #Вперед

Вопрос:

Мне сказали, что лучшим решением для запуска модульных тестов для кода, использующего службы App Engine, такие как хранилище данных или memcache, является запуск сервера разработки в дочернем процессе, но я не уверен, как это сделать. Кто-нибудь успешно провел такой тест и может поделиться решением?

App Engine SDK для Go использует Python dev_appserver; смотрите эту тему .

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

1. Каково именно ваше определение «модульного теста»? Мой тестирует один класс изолированно. Это означает, что вы используете специальные макетные объекты для всех других сервисов и классов, используемых тестируемым классом.

2. Мне нужно, например, проверить ответ заданных обработчиков, которые используют хранилище данных или memcache. Я не хочу издеваться над всем хранилищем данных или всеми другими реализациями сервисов для этого, потому что это было бы довольно огромной и безумной задачей. Поэтому мне нужно использовать базовые заглушки, реализованные в dev_appserver.py .

Ответ №1:

Вам следует ознакомиться с библиотекой тестирования Google App Engine Go от Джоша Марша.

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

1. Да, это тот самый. Он появился после публикации этого вопроса. 🙂

Ответ №2:

Интересная разработка, начиная с 1.8.6, использующая заглушки служб, была интегрирована в SDK через "appengine/aetest" пакет. Подробная информация

Ответ №3:

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

Помимо использования тестового стенда для служб GAE, интересная природа Go также открывает еще одну возможность: напишите свое приложение так, чтобы оно просто требовало объекты, которые имеют используемые вами интерфейсы (они будут подмножеством официальных API), и имитируйте их при тестировании. Для этого требуется, чтобы вы выполняли какое-то внедрение зависимостей, но в любом случае это действительно хорошая идея.

После того, как интерфейсы написаны, вы можете издеваться над ними, используя библиотеку, такую как gomock.