#java #junit #jboss #jms #cdi
#java #junit #jboss #jms #cdi
Вопрос:
Я хочу запустить тест JUnit с использованием JMS. Возможно ли, чтобы тест JUnit использовал JMS вне сервера приложений, такого как JBoss или контейнер CDI?
Комментарии:
1. почему голосование против? это разумный вопрос
2. @chrisl08 ответ хороший. В качестве альтернативы вы можете использовать встроенный брокер , чтобы избежать насмешек. Таким образом, вы можете протестировать интеграцию между вашими компонентами / классами без каких-либо заглушек или макетов. Это ближе к реальной жизни.
Ответ №1:
При условии, что отправка и использование сообщения полностью отделены от JMS, вы можете издеваться над ним.
Например: у вас может быть класс, который реализует интерфейс типа «IMyClassSender». В реальном коде (не junit) все, что делает этот класс, это отправляет сообщение в JMS. В junit реализуйте IMyClassSender с классом, который принимает входные данные и вместо этого при отправке в JMS передает их вашему потребительскому классу.
В качестве альтернативы, если вы используете active mq: http://activemq.apache.org/how-to-unit-test-jms-code.html
Комментарии:
1. Это звучит как возможное решение! Издевательство над JMS! Вопрос об activemq, мне нужно было бы включить библиотеку activemq в проект, чтобы использовать ее в JUnit?
2. Также с ActiveMQ, разве мне не нужен сервер ActiveMQ для запуска?
3. Не совсем, потому что вы можете использовать
EmbeddedActiveMQBroker
— подробности см. По ссылке, приведенной в ответе.4. честно говоря, я никогда не использовал метод, описанный в ссылке выше. Мы всегда используем метод «mock». Я просто предложил это в качестве альтернативы
Ответ №2:
Вы также можете пересмотреть использование сервера приложений для этого — Arquillian (http://arquillian.org ) позволяет выполнять модульные и интеграционные тесты в выбранной вами среде JavaEE и самостоятельно управляет жизненным циклом сервера приложений.
Комментарии:
1. Да, ваш ответ ценен, но у Arquillian есть свои нюансы. Его настройка довольно сложная, его природа сосредоточена на создании «микроразверток» для каждого теста, выполнение тестов довольно длительное и так далее…
2. кроме того, в вопросе было четко указано «тест JUnit использует JMS вне сервера приложений»
3. Существует также известная проблема с тем, что Arquillian не освобождает ресурсы после завершения теста. Эта проблема может стать препятствием, если вы планируете запускать тесты в среде непрерывного развертывания, такой как Jenkins.