Я использую DynamoDB local для модульного тестирования. Это неплохо, но имеет некоторые недостатки. В частности:
- Вам нужно как-то запустить сервер до запуска ваших тестов.
- Сервер не запускается и не останавливается перед каждым тестом, поэтому тесты становятся взаимозависимыми, если вы не добавите код для удаления всех таблиц и т.д. после каждого теста.
- Все разработчики должны установить его
То, что я хочу сделать, это что-то вроде установки локального банка DynamoDB и других банок, от которых это зависит, в моем каталоге test/resources (я пишу Java). Затем перед каждым тестом я запускал его, работая с -inMemory
, и после теста я бы остановил его. Таким образом, любой, кто вытаскивает репозиторий git, получает копию всего, что им нужно для запуска тестов, и каждый тест не зависит от других.
Я нашел способ сделать эту работу, но это уродливо, поэтому я ищу альтернативы. Решение, которое я имею, это поместить .zip файл локального материала DynamoDB в test/resources, а затем в метод @Before, я извлечу его в какой-нибудь временный каталог и запустим новый Java-процесс для его выполнения. Это работает, но это уродливо и имеет некоторые недостатки:
- Каждому нужен исполняемый файл java на $PATH
- Мне нужно распаковать zip на локальный диск. Использование локального диска часто бывает рискованным для тестирования, особенно с непрерывными сборками и т.д.
- Мне нужно запустить процесс и дождаться его начала для каждого unit test, а затем убить этот процесс после каждого теста. Помимо медленного, потенциал для процессов с переходом кажется уродливым.
Кажется, должен быть более простой способ. В конце концов, DynamoDB Local - это просто код Java. Не могу ли я каким-то образом спросить JVM о том, чтобы развить себя и заглянуть в ресурсы для создания classpath? Или, что еще лучше, я не могу просто вызвать метод main
DynamoDb Local из какого-то другого потока, так что все это происходит в одном процессе? Любые идеи?
PS: Я знаю об альтернаторе, но, похоже, имеет другие недостатки, поэтому я склонен придерживаться решения, поддерживаемого Amazon, если я могу заставить его работать.