Разработка и тестирование Spring Boot приложений

Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine

Разработка

Spring Boot предоставляет Developer Tools, которые включают такие возможности, как автоматический перезапуск и live reload во время разработки приложения.

Spring Developer Tools и загрузка классов (Classloading)

Дополнительный плагин движка процессов (ApplicationContextClassloaderSwitchPlugin) будет загружен, если приложение запущено в режиме разработки:

  • Spring Developer Tools (spring-boot-devtools) присутствуют в classpath и

  • инструменты включены, например, приложение запущено из IDE

Этот плагин обеспечивает подмену classloader’а контекста приложения на classloader, используемый движком процессов, чтобы предотвратить проблемы при десериализации.

Тестирование

Spring предоставляет широкую поддержку для автоматизированного тестирования. Она реализована через специализированные пакеты для мокинга, тестовые раннеры и аннотации. При тестировании Spring и Spring Boot приложений значительное время тратится на загрузку ApplicationContext. Поэтому Spring кэширует ApplicationContext после завершения теста. Это позволяет повторно использовать его в последующих тестах с той же конфигурацией.

Кэширование контекста с Process Engine

Для использования кэширования ApplicationContext вместе с Process Engine требуется дополнительная конфигурация. Это связано с тем, что Process Engine требует статически заданного имени (если имя не задано, используется "default"), что приводит к попытке Spring создать несколько ApplicationContext с Process Engine с одинаковым именем. Это может привести к некорректному поведению тестов или, в худшем случае, к полной ошибке загрузки ApplicationContext.

Использование уникальных имён Process Engine / Application

Чтобы кэширование контекста корректно работало с Process Engine и Process Application, они должны иметь уникальные имена для каждой различной тестовой конфигурации.

При определении новой тестовой конфигурации самый простой способ гарантировать, что новый ApplicationContext будет использовать новый Process Engine (и Process Application), — включить следующие свойства в аннотации @SpringBootTest:

@SpringBootTest(
  // ...other parameters...
  properties = {
    "openbpm.bpm.generate-unique-process-engine-name=true",
    // this is only needed if a SpringBootProcessApplication
    // is used for the test
    "openbpm.bpm.generate-unique-process-application-name=true",
    "spring.datasource.generate-unique-name=true",
    // additional properties...
  }
)
  • Свойство openbpm.bpm.generate-unique-process-engine-name=true сгенерирует уникальное имя для Process Engine (например, 'processEngine2Sc4bg2s1g').

  • Свойство openbpm.bpm.generate-unique-process-application-name=true сгенерирует уникальное имя для Process Application (например, 'processApplication2Sc4bg2s1g'). Это полезно, если вы хотите деплоить и тестировать Process Application несколько раз с разными конфигурациями.

  • Свойство spring.datasource.generate-unique-name=true создаст новый datasource для каждого нового ApplicationContext. Повторно используемые (кэшированные) ApplicationContext будут использовать один и тот же datasource.

Обратите внимание, что свойства generate-unique-process-engine-name и process-engine-name являются взаимоисключающими. Их одновременная установка приведёт к исключению.

Если в тесте требуется использовать статический доступ (например, processEngines.getProcessEngine(name)), можно использовать следующие свойства:

@SpringBootTest(
  // other parameters
  properties = {
    "openbpm.bpm.process-engine-name=foo",
    // this is only needed if a SpringBootProcessApplication
    // is used for the test
    "openbpm.bpm.generate-unique-process-application-name=true",
    "spring.datasource.generate-unique-name=true",
    // additional properties
  }
)

Здесь свойство openbpm.bpm.process-engine-name=foo установит имя Process Engine "foo".

OpenBPM Engine Assertions

Библиотека OpenBPM Engine 7 Assertions интегрирована с OpenBPM Engine Spring Boot Starter для упрощения тестирования процессов в Spring Boot приложении.

Использование Assertions с Context Caching

Библиотека утверждений OpenBPM Engine по умолчанию пытается использовать движок по умолчанию или (единственный) из доступных. Поскольку при использовании контекстного кэширования в разных контекстах используется несколько движков, требуется привязка правильного движка процесса к библиотеке утверждений OpenBPM Engine, для корректной работы как кэширования, так и утверждений. Это можно сделать с помощью следующего кода инициализации в тестовом классе:

  @Autowired
  ProcessEngine processEngine;
  @Before
  public void setUp() {
    init(processEngine);
  }

Это необходимо сделать в дополнение к требованию уникальных имен Process Engine/Application, описанному в разделе выше.

Лицензия и атрибуция

Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .

Оригинал документации: https://docs.camunda.org