Интеграционный тест Spring Boot 2.0 для JmsTemplate

У меня очень простой класс MessageHandler, который благодаря Spring Boot работает во время выполнения со следующими строками кода и конфигурации:

обработчик сообщений

    @Component
    public class MessageHandler {

        @JmsListener(destination = "${solace.jms.queueName}")
        public void processMsg(Message msg) {
            MessageHeaders hdrs = msg.getHeaders();
            etc...

основной класс

    @SpringBootApplication
    public class Application implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

config

    solace.jms.client-name=eeeee
    solace.jms.client-password=dddd
    solace.jms.client-username=ccccc
    solace.jms.msg-vpn=bbbb
    solace.jms.host=smf://aaaaa.xx.yy.com:8000
    solace.jms.queueName=ffffff

полный помпон

    <?xml version = "1.0" encoding = "UTF-8"?>
    <project xmlns = "http://maven.apache.org/POM/4.0.0"
         xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>blah</groupId>
    <artifactId>blahblah</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <start-class>blah.Application</start-class>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <cucumber.version>2.3.1</cucumber.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.solace.spring.boot</groupId>
            <artifactId>solace-jms-spring-boot-parent</artifactId>
            <version>2.0.0</version>
            <type>pom</type>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.5.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.solace.spring.boot</groupId>
            <artifactId>solace-jms-spring-boot-starter</artifactId>
            <version>2.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>2.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>2.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.197</version>
        </dependency>
        <dependency>
            <groupId>com.sybase</groupId>
            <artifactId>jconn4</artifactId>
            <version>16</version>
        </dependency>
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>3.5.3</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>2.0.5.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.0.5.RELEASE</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <artifactId>android-json</artifactId>
                    <groupId>com.vaadin.external.google</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-spring</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.0.5.RELEASE</version>
                <configuration>
                    <fork>true</fork>
                    <skip>false</skip>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Сейчас я ищу, как это проверить во время компиляции. У меня есть конкретные вопросы: как выполнить автоматическую привязку JmsTemplate как имитируемого экземпляра и какие значения конфигурации я должен использовать в свойствах тестового приложения.

Спасибо

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
1
0
10 568
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать встроенный брокер экземпляров ActiveMQ для тестирования.

От Документы Spring Boot:

When ActiveMQ is available on the classpath, Spring Boot can also configure a ConnectionFactory. If the broker is present, an embedded broker is automatically started and configured (provided no broker URL is specified through configuration).

Спасибо за быстрый ответ! Но теперь у меня есть зависимости solace-jms-spring-boot-starter и spring-boot-starter-activemq. Я могу пометить activemq с помощью проверки области видимости, но я не могу отметить jms с помощью среды выполнения. Как сообщить Spring Boot использовать зависимость MQ, если она доступна?

Jim 27.09.2018 12:05

это сложно обсуждать, когда вы не показываете свой maven pom-файл.

luboskrnac 27.09.2018 12:24

извиняюсь, он довольно большой, но добавлен сейчас

Jim 27.09.2018 12:31
Ответ принят как подходящий

Взгляните на Мок-тесты JMS, которые являются частью расширенных примеров тестирования для Spring Integration. Обратите внимание, что это отличается от интеграционного тестирования (несмотря на название), которое предполагает подключение к реальному брокеру. Мок-тесты не включают в себя какого-либо брокера (внешнего или встроенного) и включают проверку как действительных, так и недействительных сообщений.

В качестве альтернативы вы можете использовать Spring Cloud Stream для обработки сообщений. Это более простой / новый способ создания микросервисов Spring Boot, управляемых событиями, который позволяет избежать написания стандартного кода обмена сообщениями, например, при использовании JmsTemplate. Для брокера Solace доступен связующее. Более того, вы также можете смоделировать MessageHandler и протестировать аналогично примерам Spring Integration, упомянутым ранее. Подробнее см. эта статья.

Другие вопросы по теме