Я использую DynamoDB local для модульного тестирования. Это неплохо, но имеет некоторые недостатки. В частности:Простой локальный тест DynamoDB
- Вы должны каким-то образом запустить сервер, прежде чем тесты запустить
- Сервер не запускается и останавливается перед каждым испытанием так тесты становятся взаимозависимыми, если не добавить код, чтобы удалить все таблицы и т.д. после каждого испытания
- Все разработчики должны установить ее
то, что я хочу сделать что-то вроде поставить местную банку DynamoDB и другие банки, на которых она зависит, в моем каталоге тестов/ресурсов (I Я пишу Java). Затем перед каждым тестом я запустил его, работая с -inMemory
, и после теста я бы остановил его. Таким образом, любой, кто вытаскивает git repo, получает копию всего, что им нужно, чтобы запускать тесты, и каждый тест не зависит от других.
Я нашел способ сделать эту работу, но это уродливо, поэтому я ищу альтернативы. Решение, которое я имею, это поместить .zip-файл локального материала DynamoDB в test/resources, а затем в метод @Before, я извлечу его в какой-нибудь временный каталог и запустим новый Java-процесс для его выполнения. Это работает, но это некрасиво и имеет некоторые недостатки:
- Каждый нуждается в Java исполняемый файл на их $ PATH
- Я должен распаковать молнию на локальном диске. Использование локального диска часто бывает скучным для тестирования, особенно при непрерывных сборках и т. Д.
- Мне нужно запустить процесс и дождаться его запуска для каждого модульного теста, а затем убить этот процесс после каждого теста. Помимо медленного, потенциал для процессов, связанных с переходом, кажется уродливым.
Кажется, что должен быть более простой способ. В конце концов, DynamoDB Local - это просто код Java. Не могу ли я каким-то образом спросить JVM о том, чтобы развить себя и заглянуть в ресурсы для создания classpath? Или, еще лучше, не могу ли я просто вызвать метод DynamoDb Local main
из какого-то другого потока, так что все это происходит в одном процессе? Есть идеи?
PS: Я знаю об альтернаторе, но, похоже, имеет другие недостатки, поэтому я склонен придерживаться поддерживаемого решения Amazon, если я могу заставить его работать.
Как S ay, что вы хотите написать модульные тесты - не интеграционные тесты - почему бы не использовать макет? Что-то вроде DynamoDB-mock. Это позволяет [быть инкапсулированным как библиотека] (http://ddbmock.readthedocs.org/en/latest/pages/getting_started.html#using-ddbmock-for-tests). – cheffe
@ cheffe, спасибо за эту мысль. Это похоже на то, что я хочу, но это Python, а не Java, поэтому мне все равно придется выставлять внешний исполняемый файл из моих тестов так же, как я делаю с DynamoDB Local (и убедитесь, что все пользователи имеют правильную версию Python установленный, имел это на их $ PATH и т. д.). Я ищу что-то очень похожее, но на Java. Обратите внимание, что создание моего собственного макета будет огромной задачей, поскольку API Dynamo довольно богат. –