Интеграционный тест в приложении Spring с использованием Flowable

#java #spring #activiti #flowable

#java #spring #activiti #flowable

Вопрос:

Мне нужно написать несколько интеграционных тестов для моего приложения Spring с использованием Flowable. Мои тесты должны включать логику рабочего процесса приложения BPMN.

Мой вопрос — должен ли я запускать и развертывать обычный движок Flowable engine во время моих тестов, как я делаю в приложении? В официальной документации я вижу некоторые классы Flowable, подготовленные для модульного тестирования, но ничего для интеграции.

Не вызовет ли запуск реального движка Flowable проблем с производительностью во время его запуска? Я боюсь, что они займут много времени, если мне нужно будет запускать это с каждым тестом отдельно. Как вы справляетесь с этим в своих приложениях?

Ответ №1:

Если вы спросите меня, то вам обязательно следует запустить и развернуть обычный движок Flowable во время ваших тестов. Ссылка, которую вы вставили из документации, — это точный способ, которым вы можете выполнить тест. Имейте в виду, что вы можете использовать свою собственную конфигурацию, вам не нужна специальная конфигурация Spring для тестирования.

Запуск реальных движков Flowable не вызовет проблем с производительностью во время тестирования. Все тесты в репозитории Flowable на самом деле являются тестами, которые создают и уничтожают движок в рамках одного теста, и это довольно быстро. В вашем случае это было бы еще быстрее, поскольку вы не будете запускать движок для каждого теста (контекст приложения Spring кэшируется между тестами). Я также должен отметить, что даже если вы запустите движок для каждого теста, время будет незначительным, поскольку загрузка движка происходит довольно быстро.

Имейте в виду, что другие компоненты вашего приложения Spring могут замедлить запуск тестов.

В качестве ссылки в модуле flowable-spring есть 76 тестов в 28 тестовых классах, где каждый тестовый класс имеет свою собственную конфигурацию Spring, что означает, что повторное использование контекста Spring между тестами отсутствует. Все эти тесты занимают 55 секунд на моем локальном компьютере. Для этих тестов вам необходимо учитывать, что некоторые тесты тестируют некоторые сложные сценарии, в которых выполняются асинхронные исполнители, и занимают больше времени, чем обычно. Скорее всего, у вас не будет таких тестов. Если эти конкретные тесты отключены (3 из 3 тестовых классов), время тестирования сокращается до 28 секунд.

ПРИМЕЧАНИЕ: если вы не используете @Deployment или полагаетесь на функцию автоматического развертывания из Flowable, убедитесь, что вы удаляете экземпляры, которые вы создаете в своих тестах. Это позволит убедиться, что данные из одного теста не влияют на данные из другого теста.