Mocking RabbitMQ для тестирования - PullRequest
0 голосов
/ 01 июля 2019

У меня есть приложение Spring, где я использую RabbitMQ для публикации и использования сообщений.Фабрика соединений создается следующим образом:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration"
    xmlns:int-amqp="http://www.springframework.org/schema/integration/amqp"
    xmlns:rabbit="http://www.springframework.org/schema/rabbit"
    xmlns:int-stream="http://www.springframework.org/schema/integration/stream"
    xsi:schemaLocation="http://www.springframework.org/schema/integration/amqp http://www.springframework.org/schema/integration/amqp/spring-integration-amqp.xsd
        http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
        http://www.springframework.org/schema/integration/stream http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd
        http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="RabbitMQ" class="com.services.RabbitMqListenerService" />

    <rabbit:connection-factory id="connectionFactory"
        host="${rabbitmq.host}" port="${rabbitmq.port}"
        username="${rabbitmq.username}" password="${rabbitmq.password}" cache-mode="${rabbitmq.cacheMode}"
                               connection-cache-size="${rabbitmq.connectionCacheSize}"/>
</beans>

Но пока я запускаю тесты, а не создаю это соединение, я хочу создать карту в памяти, которая будет работать для меня как очередь.Это я хочу сделать, чтобы убедиться, что все мои сообщения синхронизированы, поскольку асинхронные сообщения могут сделать тесты нестабильными.

В приложениях с весенней загрузкой это очень просто сделать.В application.java я могу добавить код ниже, и он будет работать:

public ConnectionFactory connectionFactory() {
        if (Boolean.parseBoolean(environment.getProperty("mock.rabbitmq"))) {
            return new MockRMQConnectionFactory();
        }
        com.rabbitmq.client.ConnectionFactory rabbitmqConnectionFactory = new com.rabbitmq.client.ConnectionFactory();
        rabbitmqConnectionFactory.setHost(environment.getProperty("rabbitmq.address"));
        rabbitmqConnectionFactory.setUsername(environment.getProperty("rabbitmq.user"));
        rabbitmqConnectionFactory.setPassword(environment.getProperty("rabbitmq.password"));
        rabbitmqConnectionFactory.setConnectionTimeout(
                Integer.parseInt(environment.getProperty("rabbitmq.connection.timeout")));
        return connectionFactory;   
}

Я просто не уверен, как сделать то же самое, когда я пытаюсь создать bean-компоненты rmq в файле XML (rabbitmq.xml).Может кто-нибудь, пожалуйста, помогите мне здесь.

1 Ответ

0 голосов
/ 01 июля 2019

Вы можете иметь отдельный файл конфигурации bean-компонента, как вы показали выше для тестирования. Аннотируйте свой тест следующим образом.

@ ContextConfiguration (location = "rabitmqconfiguration.xml") @RunWith (SpringJUnit4ClassRunner.class)

где rabitmqconfiguration.xml будет иметь определения bean-компонентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...