Запуск оригинального приложения из интеграционного теста Spring Boot - PullRequest
0 голосов
/ 08 января 2020

У меня есть простое приложение Spring Boot, которое читает из Kafka topi c и сохраняет сообщения в некотором кэше. Я хотел бы добавить интеграционный тест, который запустит мое исходное приложение, сгенерирует некоторые сообщения из встроенного Kafka, а затем утвердит содержимое кэша.

Я борюсь с частью "Запустить мое оригинальное приложение". Как это сделать из интеграционного теста Spring Boot? Я пытался сделать что-то подобное:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = OriginalApplication.class)
@EmbeddedKafka
public class OriginalApplicationIntegrationTest {

    @Test
    public void test() throws Exception {
    ...
    }
}

Но я не вижу попыток Spring запустить мое оригинальное приложение.

1 Ответ

1 голос
/ 08 января 2020

Прежде всего, есть две возможные большие «области», которые могут go ошибаться:

  • Настройка теста начальной загрузки
  • Интеграция с Kafka

Я полагаю, что вопрос касается первой части, поэтому я сконцентрируюсь на этой части.

Для быстрого ответа: Когда вы добавляете аннотацию @SpringBootTest, попробуйте использовать ее вообще без параметров. И убедитесь, что тест помещен в правильную упаковку, это важно. Это включит автоматическое c разрешение вашего приложения.

Теперь я попытаюсь кратко объяснить, почему это важно, topi c действительно широкий и глубокий.

  1. Spring Boot проверяет, существует ли в том же пакете, что и интеграционный тест, класс, аннотированный @SpringBootConfiguration (это аннотация, помещенная в @SpringBootApplication - что, в свою очередь, относится к вашему основному классу) Допустим, com.abc.myapp.test - это место, где вы положили тест)
  2. Если не найдено, он поднимает одну упаковку и проверяет там (com.abc.myapp). Он будет делать это снова и снова до пакета root, однако предположим, что аннотированный класс @SpringBootApplication находится в этом пакете. Обратите внимание, если этот рекурсивный «поиск» не находит @SpringBootApplication аннотированный класс - тест не запускается. Вот почему важно использовать структуру пакетов, предлагаемую приложением весенней загрузки.

  3. Теперь, когда он находит этот класс, он знает, какие пакеты следует сканировать на наличие bean-компонентов для запуска приложения весенней загрузки. Поэтому он пытается найти бины в соответствии с практикой весенней загрузки (пакет com.abc.myapp и ниже). В этот раз он делает это снова рекурсивно сверху вниз.

Он также запускает ваши стартеры (автоконфигурации) в этом режиме.

Итак, нижняя строка:

Указание @SpringBootTest без параметров заставляет пружинную загрузку делать все возможное, чтобы имитировать c запуск реального приложения

Если вы используете его с Однако параметры, в которых вы указываете конфигурацию, ведут себя совершенно иначе: все равно, что сказать: «Я знаю, где находятся мои конфигурации, не пытайтесь запустить все, вот моя конфигурация, загружайте только ее».

Совершенно другая вещь, без рекурсивных поисков, без запуска автоконфигураций и т. Д. c.

...