Тестирование интеграции EventStore с узлом в памяти - PullRequest
0 голосов
/ 09 декабря 2018

Я хотел бы написать несколько интеграционных тестов, используя www.eventstore.org, чтобы проверить, что я могу сериализовать некоторые доменные события и добавить их в поток, получить их и десериализовать их и т. Д.

Я пытался выяснить, как люди обычно делают это, и я прочитал ответ Грега Янга (немного устаревший) о разных подходах:

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

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

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

Вопрос в том, как использовать хранилище событий в памяти при выполнении интеграционных тестов, если, скорее всего, ОС, в которойsts работает, не установлены двоичные файлы хранилища событий, и, следовательно, нет реального сервера хранилища событий для запуска в памяти?Я не хочу, чтобы мои тесты проваливались только потому, что на компьютере, на котором выполняются тесты, не установлено и не работает хранилище событий.

Я знаю, что в некоторых базах данных на рынке есть какой-то пакет nuGet, содержащий тот же механизм БДиспользуется в производстве, но в качестве БД в оперативной памяти, поэтому для выполнения тестов на компьютере не требуется «настоящий» сервер.Все двоичные файлы находятся в DLL, доступной для проекта.

Я попытался найти ответы на некоторые вопросы о том, доступно ли что-то подобное для хранилища событий.Я читал некоторые комментарии людей, рассказывающих о каком-то API-интерфейсе для встроенного клиента, но документация, которую я нашел, не очень ясна.В других комментариях упоминается что-то под названием MiniNode, но, опять же, потоки предполагают слишком много и еще не нашли четкого описания того, что это такое или как я могу использовать для своих тестов.

В общем, кто-нибудь может предоставитьПример интеграционного теста (если возможно, xUnit), когда IEventStoreConnection использует хранилище событий в памяти, где вообще не установлено хранилище событий?

ОБНОВЛЕНИЕ 1 : я пыталсядобавьте зависимость nuGet EventStore.Client.Embedded , чтобы поиграть с ней на всякий случай, если это было то, что мне было нужно.Но у него нет поддержки DotNetCore (стандарт 2.0), поэтому я не могу сказать.Затем я прочитал эту ClientAPI.NetCore проблему , где кто-то предлагает использовать другой подход к тестированию, который использует Chocolatey для захвата EventStore, а затем выполнить из кода EventStore.ClusterNode (я бы сделал этос флагом --mem-db).Я не уверен, что мне это нравится, по крайней мере, не больше, чем использование Docker для той же цели.Мне все еще интересно, есть ли альтернатива?

ОБНОВЛЕНИЕ 2 Поскольку я использую gitlab, я запускаю свои интеграционные тесты в Event Store, раскручивая службу хранилища событий (контейнер), которая прекратит работукак только завершится этап непрерывной интеграции.

integration-tests:
  image: my-images-repo/my-gitlab-runner-dotnet-core:latest
  stage: integration-tests  
  services:
    # add event store service
    - eventstore/eventstore:release-4.1.1-hotfix1    
  variables:
    # event store service params testing with standard ports
    EVENTSTORE_INT_TCP_PORT: "1113"
    EVENTSTORE_EXT_TCP_PORT: "1113"
    EVENTSTORE_INT_HTTP_PORT: "2113"
    EVENTSTORE_EXT_HTTP_PORT: "2113"
    EVENTSTORE_EXT_HTTP_PREFIXES: "http://*:2113/"   
  script:
    - dotnet restore --no-cache --force
    - dotnet build --configuration Release
    - dotnet vstest *IntegrationTests/bin/Release/**/*IntegrationTests.dll

Это еще не ответило на мой вопрос, но это решение для моих нужд.

ОБНОВЛЕНИЕ 3: (21 июня2019) В netstandard 2.0 все еще не поддерживается встроенный клиент, поэтому я не могу использовать его для запуска узла в памяти в целях тестирования.Однако есть еще один вариант использования докера, описанный здесь

Также API-интерфейс EventStore C # теперь находится в nuGet EventStore.Client (в настоящее время 5.0.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...