Unit тестирование BPMN процессов

1. Тестирование реализаций бизнес процессов BPMN

С добавлением camunda как движка BPMN, в проекте появилась возможность писать unit тесты для процессов.

На текущий момент, есть возможность писать тесты только в микросервисе ecos-process, в дальнейшем планируется добавить возможность написания тестов для различных проектов.

Для написания unit тестов используются библиотеки облегчающие тестирование bpmn:

2. Тестирование ecos компонентов BPMN

Тесты написанные для проверки ecos компонентов bpmn представляют собой небольшие процессы BPMN, которые реализуют варианты использования ecos компонентов, с дальнейшем запуском процесса и проверкой результатов.

Тесты располагаются в микрсоервисе ecos-process по пути src/test/java/ru/citeck/ecos/process/domain/bpmn/elements и написаны в стиле GivenWhenThen.

Предполгается покрытие тестами каждого компонента. На моммент написания статьи написано порядка 40 тестов.

2.1 Пример unit BPMN теста

Проверка назначения userTask по роли.

Процесс:

../../../_images/process_unit_example.png

Unit test:

Bpmn unit test
@Test
fun `task assignment by roles`() {
    val procId = "test-user-task-role"
    saveAndDeployBpmn(USER_TASK, procId)

    `when`(process.waitsAtUserTask("userTask")).thenReturn {
        assertThat(it).hasCandidateUser(USER_IVAN)
        assertThat(it).hasCandidateUser(USER_PETR)

        assertThat(it).hasCandidateGroup(GROUP_MANAGER)
        assertThat(it).hasCandidateGroup(GROUP_DEVELOPER)
        it.complete()
    }

    run(process).startByKey(procId, variables).execute()

    verify(process).hasFinished("endEvent")
}

Таким образом, проверяется, что при выполнении компонента userTask, была назначена задача на корректных пользователей и группы исходя из указанных ролей.