Есть ли способ использовать JMS в тесте JUnit?

#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.