2010-04-25 3 views
2

Есть ли простая реализация сервера AMKP/брокера, написанная на Java?Простой Java AMQP-сервер

Мне нужно использовать его для тестов локальной интеграции. Я хотел бы начать с ant/maven, и мне не нужны такие функции, как кластеризация, настойчивость, производительность и т. Д. Просто макет RabbitMQ-подобный экземпляр, без установки (как зависимость от maven pom) и конфигурации.

ответ

3

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

Существует org.apache.qpid, которые вы можете просто включить в приложение в виде МВН/Gradle (mvn central) зависимости (Gradle пример):

testCompile 'org.apache.qpid:qpid-broker:6.0.1' 

, а затем добавить Rule содержащий ExternalResource, который стреляет вверх брокера, прежде чем ваши тесты , несколько похожи на эту довольно простую установку:

@Rule 
private static final ExternalResource embeddedAMQPBroker = new ExternalResource() { 
    Broker broker; 

    @Override 
    protected void before() throws Throwable { 
     BrokerOptions brokerOptions = new BrokerOptions(); 
     brokerOptions.setConfigProperty("qpid.amqp_port", "55672"); 
     broker = new Broker(); 
     broker.startup(brokerOptions); 
    } 

    @Override 
    protected void after() { 
     broker.shutdown(); 
    } 
}; 

непроверенного, так как для меня это не сработал, потому что все мои приложения содержат Jetty 9 и QPID (все еще) требует Jetty < 9.

+0

, наконец, через 6 лет с моего вопроса есть ampq-брокер, который можно запустить из кода :) –

+0

Мне пришлось объявить ExternalResource публичным и аннотировать его с помощью @ClassRule, чтобы он работал с JUnit4.12. – danidemi

1

Что вы ищете, это AMQP Mock Object. Я действительно ничего не знаю и сомневаюсь, что вы найдете что-нибудь с полки.
Если вы используете JUnit в качестве тестирования, то вы выполняете тестирование UNIT. Тестирование модулей отличается от тестирования интеграции и не включает собственно чтение/запись в очередь.
Возможно, здесь вы можете реструктурировать свой тест или даже код, чтобы включить все, кроме чтения/записи в очередь?
Другим вариантом является то, что вы завернули свой AMQP в какой-либо другой класс для переносимости, а затем просто издевались над этим объектом.

+0

Я уже использую некоторые MQ mocks для моего модульного теста. Но мое приложение является сложным и состоит из нескольких модулей станалонов, которые обмениваются данными через MQ. Поэтому я хочу запустить его без установки RabbitMQ в систему, чтобы упростить интеграционное тестирование. –

Смежные вопросы