Примеры использования Assert
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
Подтверждения (Assertions)
Экземпляр: isActive
Подтвердить, что экземпляр процесса активен в настоящее время, то есть ни приостановлен, ни завершен:
assertThat(processInstance).isActive();
Экземпляр: isEnded
Подтвердить, что экземпляр процесса уже завершен:
assertThat(processInstance).isEnded();
Экземпляр: isNotEnded
Подтвердить, что экземпляр процесса еще не завершен:
assertThat(processInstance).isNotEnded();
Экземпляр: isStarted
Подтвердить, что экземпляр процесса стартовал:
assertThat(processInstance).isStarted();
Экземпляр: isSuspended
Подтвердить, что экземпляр процесса приостановлен:
assertThat(processInstance).isSuspended();
Экземпляр: hasPassed
Подтвердить, что экземпляр процесса прошел через заданную активность:
assertThat(processInstance).hasPassed("edit");
Подтвердить, что экземпляр процесса прошел через несколько заданных активностей:
assertThat(processInstance).hasPassed("edit", "correct");
Экземпляр: hasPassedInOrder
Подтвердить, что экземпляр процесса прошел через несколько заданных активностей строго в заданном порядке:
assertThat(processInstance).hasPassedInOrder("edit", "review", "correct");
Вы даже можете подтвердить, что конкретная активность была пройдена несколько раз:
assertThat(processInstance).hasPassedInOrder("edit", "review", "correct", "review", "correct", "review", "publish");
Не имеет значение, были ли пройдены другие активности в промежутках между этими заданными активностями. Имеет значение только былл ли порядок правильным. Поэтому в приведенном только что примере следующее более минималистичное подтверждение тоже пройдет:
assertThat(processInstance).hasPassedInOrder("edit", "review", "publish");
Экземпляр: hasNotPassed
Подтвердить, что экземпляр процесса не прошел через определенную активность:
assertThat(processInstance).hasNotPassed("edit");
Подтвердить, что экземпляр процесса не прошел ни через одну из нескольких перечисленных активностей:
assertThat(processInstance).hasNotPassed("edit", "correct");
Экземпляр: hasVariables
Подтвердить, что экземплр процесса содержит хотя бы одну процессную переменную:
assertThat(processInstance).hasVariables();
Подтвердить, что экземпляр процесса содержит, помимо потенциально других переменных, одну или более процессных переменных заданного вида:
assertThat(processInstance)
.hasVariables("approved")
.hasVariables("jobAnnouncementId", "approved");
Экземпляр: hasNoVariables
Подтвердить, что экземпляр процесса не содержит вообще никаких процессных переменных:
assertThat(processInstance).hasNoVariables();
Экземпляр: hasProcessDefinitionKey
Подтвердить, что экземпляр процесса основан на заданном определении процесса:
assertThat(processInstance).hasProcessDefinitionKey("myProcessDefinitionKey");
Экземпляр: hasBusinessKey
Подтвердить, что экземпляр процесса имеет заданный бизнес-ключ:
assertThat(processInstance).hasBusinessKey("myBusinessKey");
Экземпляр: isWaitingAt
Подтвердить, что экземпляр процесса в настоящее время ждет на заданном id активности:
assertThat(processInstance).isWaitingAt("edit");
Подтвердить, что экземпляр процесса в настоящее время ждет на нескольких заданных id активностей:
assertThat(processInstance).isWaitingAt("edit", "correct");
Экземпляр: isNotWaitingAt
Подтвердить, что экземпляр процесса в настоящий момент НЕ ждет на заданном id активности:
assertThat(processInstance).isNotWaitingAt("edit");
Подтвердить, что экземпляр процесса в настоящий момент НЕ ждет на нескольких заданных id активностей:
assertThat(processInstance).isNotWaitingAt("edit", "correct");
Экземпляр: isWaitingAtExactly
Подтвердить, что экземпляр процесса в настоящее время ждет точно на одном заданном id активности:
assertThat(processInstance).isWaitingAtExactly("edit");
Подтвердить, что экземпляр процесса в настоящее время ждет точно на нескольких заданных id активностей:
assertThat(processInstance).isWaitingAtExactly("edit", "correct");
Экземплр: isWaitingFor
Подтвердить, что экземпляр процесса в настоящее время ждет заданного сообщения:
assertThat(processInstance).isWaitingFor("myMessage");
Подтвердить, что экземпляр процесса в настоящее время ждет нескольких заданных сообщений:
assertThat(processInstance).isWaitingFor("myMessage", "yourMessage");
Экземпляр: isNotWaitingFor
Подтвердить, что экземпляр процесса в настоящее время НЕ ждет заданного сообщения:
assertThat(processInstance).isNotWaitingFor("myMessage");
Подтвердить, что экземпляр процесса в настоящее время НЕ ждет ни одного из нескольких заданных сообщений:
assertThat(processInstance).isNotWaitingFor("myMessage", "yourMessage");
Определение: hasActiveInstances
Подтвердить, что определение процесса в настоящий момент имеет в точности ожидаемое количество "активных" (ни законченных, ни приостановленных) экземпляров:
assertThat(processDefinition).hasActiveInstances("1");
Джоба: hasActivityId
Подтвердить, что джоба базируется на определении активности с заданным id:
assertThat(job).hasActivityId("ServiceTask_1");
Джоба: hasDeploymentId
Подтвердить, что у джобы заданный id деплоймента:
assertThat(job).hasDeploymentId(deploymentId);
Джоба: hasDueDate
Подтвердить, что у джобы есть конкретная дата окончания:
assertThat(job).hasDueDate(dueDate);
Джоба: hasRetries
Подтвердить, что у джобы осталось конкретное число повторных попыток:
assertThat(job).hasRetries(3);
Задача: isAssignedTo
Подтвердить, что заданный пользователь назначен на задачу:
assertThat(task).isAssignedTo("kermit");
Задача: isNotAssigned
Подтвердить, что на настоящий момент задача не назначена ни на какого пользователя:
assertThat(task).isNotAssigned();
Задача: hasCandidateGroup
Подтвердить, что задача ожидает назначения на заданную группу кандидатов.
assertThat(task).hasCandidateGroup("human-resources-department");
Отметим, что (в соответствии с интерпретацией термина "кандидат", принятой в Camunda) назначенные задачи не пройдут этот тест, хотя следующий описываемый здесь тест будет пройден:
Задача: hasCandidateGroupAssociated
Подтвердить ожидания от том, что задача в настоящее время ассоциирована с заданной группой кандидатов — независимо от того, назначена ли она на конкретного пользователя или нет.
assertThat(task).hasCandidateGroupAssociated("human-resources-department");
Задача: hasCandidateUser
Подтвердить, что задача ожидает назначения на конкретного пользователя-кандидата:
assertThat(task).hasCandidateUser("kermit");
Отметим, что (в соответствии с интерпретацией термина "кандидат", принятой в Camunda) назначенные задачи не пройдут этот тест, хотя следующий описываемый здесь тест будет пройден:
Задача: hasCandidateUserAssociated
Подтвердить ожидание, что задача в настоящее время ассоциирована с заданным пользователем-кандидатом, назваисимо от того, анзначена ли она на конкретного пользователя или нет.
assertThat(task).hasCandidateUserAssociated("kermit");
Задача: hasDefinitionKey
Подтвердить, что у задачи имеется заданный ключ определения (он же атрибут элемента `<userTask id="review-and-approve" …/>`в XML-файле определения процесса BPMN 2.0):
assertThat(task).hasDefinitionKey("review-and-approve");
Задача: hasDescription
Подтвердить, что у задачи имеется заданное описание в свободном текстовом формате:
assertThat(task).hasDescription("Please review and approve the result document.");
Задача: hasDueDate
Подтвердить, что у задачи имеется дата окончания и она соответствует заданной:
assertThat(task).hasDueDate(expectedDueDate);
Задача: hasFormKey
Подтвердить, что задача ассоциирована с заданной формой (ключом):
assertThat(task).hasFormKey("myForm.html");
Задача: hasName
Подтвердить, что задача имеет заданное имя:
assertThat(task).hasName("Review and approve");
Помощники (Helpers)
Нахождение задач, событий и шлюзов по имени
Вы можете сделать маппинг имени задачи, события или шлюза его ID с помощью статического метода-помощника:
findId("My verbose task name");
Запрос на получение задачи
Вы можете сделать запрос на получение задачи напрямую с помощью статического метода-помощника:
claim(task, "fozzie");
Отказ от запроса на получение задачи
Вы можете отказаться от запроса на получение задачи напрямую с помощью статического метода-помощника:
unclaim(task);
Завершение выполнения задачи
Вы можете завершить выполнение задачи напрямую с помощью статического метода-помощника:
complete(task);
Завершение выполнения задач и передача процессных переменных
Вы можете сконструировать карты процессных переменных, передав последовательность пар "ключ/значение" в статический метод-помощник withVariables:
Map<String, Object> variables = withVariables("documentId", 5, "approved", true);
Соответственно, вы можете, например, написать:
complete(task, withVariables("documentId", 5, "approved", true));
Завершение выполнения внешних задач
Вы можете завершить выполнение внешней задачи напрямую с помощью статического метода-помощника:
complete(externalTask);
Завершение выполнения внешних задач и передача процессных переменных
Вы можете сконструировать карты процессных переменных, передав последовательность пар "ключ/значение" в статический метод-помощник withVariables:
Map<String, Object> variables = withVariables("documentId", 5, "approved", true);
Соответственно, вы можете, например, написать:
complete(externalTask, withVariables("documentId", 5, "approved", true));
Выполнение джоб
Вы можете выполнить джобу напрямую с помощью статического метода-помощника:
execute(job());
Создание запросов
Вы можете создавать запросы напрямую с помощью статического метода-помощника:
TaskQuery taskQuery = taskQuery();
JobQuery jobQuery = jobQuery();
ProcessInstanceQuery processInstanceQuery = processInstanceQuery();
ExecutionQuery executionQuery = executionQuery();
Соответственно, вы можете, например, написать:
assertThat(processInstance).task(taskQuery().taskAssignee("fozzie")).hasCandidateGroup("human-resources-department");
Доступ к движку и сервисам API движка
Вы можете получить доступ к движку и сервисам API напрямую с помощью статических методов-помощников:
ProcessEngine engine = processEngine();
AuthorizationService authorizationService = authorizationService();
FormService formService = formService();
HistoryService historyService = historyService();
IdentityService identityService = identityService();
ManagementService managementService = managementService();
RepositoryService repositoryService = repositoryService();
RuntimeService runtimeService = runtimeService();
TaskService taskService = taskService();
Подтверждения на единственной задаче экземпляра
Вы можете извлечь "цепной" assert задачи, проверяющий единственную задачу, доступную в настоящий момент в контексте экземпляра процесса…
assertThat(processInstance).task();
-
чтобы напрямую выполнить подтверждения на ней, например:
assertThat(processInstance).task().isNotAssigned();
Подтверждения на конкретной задаче из экземпляра
Вы можете извлечь "цепной" assert задачи, проверяющий конкретную задачу, доступную в настоящий момент в контексте экземпляра процесса…
assertThat(processInstance).task("edit");
или
assertThat(processInstance).task(taskQuery().taskAssignee("fozzie"));
-
чтобы напрямую выполнить подтверждения на ней, например:
assertThat(processInstance).task("edit").isAssignedTo("fozzie");
Подтверждения на единственной внешней задаче экземпляра
Вы можете извлечь "цепной" assert задачи, проверяющий единственную внешнюю задачу, доступную в настоящий момент в контексте экземпляра процесса…
assertThat(processInstance).externalTask();
-
чтобы напрямую выполнить подтверждения на ней, например:
assertThat(processInstance).externalTask().hasTopicName("editing");
Подтверждения на конкретной внешней задаче из экземпляра
Вы можете извлечь "цепной" assert задачи, проверяющий конкретную внешнюю задачу, доступную в настоящий момент в контексте экземпляра процесса…
assertThat(processInstance).externalTask("edit");
или
assertThat(processInstance).externalTask(externalTaskQuery().activityId("edit"));
-
чтобы напрямую выполнить подтверждения на ней, например:
assertThat(processInstance).externalTask("edit").hasTopicName("editing");
Подтверждения на единственной джобе экземпляра
Вы можете извлечь "цепной" assert задачи, проверяющий единственную джобу, доступную в настоящий момент в контексте экземпляра процесса…
assertThat(processInstance).job();
-
чтобы напрямую выполнить подтверждения на ней, например:
assertThat(processInstance).job().hasRetries(0);
Подтверждения на конкретной джобе экземпляра
Вы можете извлечь "цепной" assert задачи, проверяющий конкретную джобу, доступную в настоящий момент в контексте экземпляра процесса…
assertThat(processInstance).job("ServiceTask_1");
или
assertThat(processInstance).job(jobQuery().executionId(executionId));
-
чтобы напрямую выполнить подтверждения на ней, например:
assertThat(processInstance).job("ServiceTask_1").hasRetries(0);
Making assertions on the only called process of a super process instance
You can retrieve a "chained" process instance assert inspecting the one and only called process instance currently available in the context of a super process instance…
assertThat(processInstance).calledProcessInstance();
-
in order to directly make assertions on it, e.g.
assertThat(processInstance).calledProcessInstance().hasProcessDefinitionKey("mySubProcessDefinitionKey");
Making assertions on a specific called process instance of a super process instance
You can retrieve a "chained" process instance assert inspecting a very specific called process instance currently available in the context of a super process instance, either by means of a processDefinitionKey…
assertThat(processInstance).calledProcessInstance("mySubProcessDefinitionKey");
or even by means of a more sophisticated processInstanceQuery
assertThat(processInstance).calledProcessInstance(processInstanceQuery().processDefinitionKey("mySubProcessDefinitionKey"));
-
in order to directly make assertions on it, e.g.
assertThat(processInstance).calledProcessInstance("mySubProcessDefinitionKey").isNotNull();
Making assertions on the process variables map of an instance
You can retrieve a "chained" process variables map assert inspecting all the process variables available in the context of a process instance…
assertThat(processInstance).variables();
-
in order to directly make assertions on them, e.g.
assertThat(processInstance).variables()
.hasSize(2).containsEntry("approved", true);
You may want to compare that with the other possibility to assert whether a process instance hasVariables link:{{< relref "#instance-hasvariables" >}}[] (without leaving your current ProcessInstanceAssert).
Accessing tasks in the context of a process instance under test
You can directly access tasks in the context of the last asserted process instance by means of static helper methods:
assertThat(processInstance).isNotNull();
...
Task onlyTaskOflastAssertedProcessInstance = task();
Task someTaskOflastAssertedProcessInstance = task("review-and-approve");
Task sameTaskOflastAssertedProcessInstance = task(taskQuery().taskDefinitionKey("review-and-approve"));
You can therefore e.g. write …
assertThat(processInstance).task().hasDefinitionKey("review-and-approve");
complete(task(), withVariables("documentId", 5, "approved", true));
Furthermore you can directly access tasks in the context of a specified process instance by means of static helper methods:
Task onlyTaskOfProcessInstance = task(processInstance);
Task someTaskOfProcessInstance = task("review-and-approve", processInstance);
Task sameTaskOfProcessInstance = task(taskQuery().taskDefinitionKey("review-and-approve"), processInstance);
You can therefore e.g. write …
complete(task("review-and-approve", processInstance), withVariables("documentId", 5, "approved", true));
Accessing external tasks in the context of a process instance under test
You can directly access external tasks in the context of the last asserted process instance by means of static helper methods:
assertThat(processInstance).isNotNull();
...
ExternalTask onlyTaskOflastAssertedProcessInstance = externalTask();
ExternalTask someTaskOflastAssertedProcessInstance = externalTask("review-and-approve");
ExternalTask sameTaskOflastAssertedProcessInstance = externalTask(externalTaskQuery().activityId("review-and-approve"));
You can therefore e.g. write …
assertThat(processInstance).externalTask().hasActivityId("review-and-approve");
complete(externalTask(), withVariables("documentId", 5, "approved", true));
Furthermore you can directly access external tasks in the context of a specified process instance by means of static helper methods:
ExternalTask onlyTaskOfProcessInstance = externalTask(processInstance);
ExternalTask someTaskOfProcessInstance = externalTask("review-and-approve", processInstance);
ExternalTask sameTaskOfProcessInstance = externalTask(externalTaskQuery().activityId("review-and-approve"), processInstance);
You can therefore e.g. write …
complete(externalTask("review-and-approve", processInstance), withVariables("documentId", 5, "approved", true));
Accessing jobs in the context of a process instance under test
You can directly access jobs in the context of the last asserted process instance by means of static helper methods:
assertThat(processInstance).isNotNull();
...
Job onlyJobOflastAssertedProcessInstance = job();
Job someJobOflastAssertedProcessInstance = job("publish");
Job someJobOflastAssertedProcessInstance = job(jobQuery().executionId(executionId));
You can therefore e.g. write …
assertThat(processInstance).job("publish").isNotNull();
execute(job("publish"));
Furthermore you can directly access jobs in the context of a specified process instance by means of static helper methods:
Task onlyJobOfProcessInstance = job(processInstance);
Task someJobOfProcessInstance = job("publish", processInstance);
Task sameJobOfProcessInstance = job(jobQuery().executable(), processInstance);
You can therefore e.g. write …
execute(job("publish", processInstance));
Accessing called process instances in the context of a process instance under test
You can directly access called process instances in the context of the last asserted process instance by means of static helper methods:
assertThat(processInstance).isNotNull();
...
ProcessInstance onlyCalledProcessInstanceOflastAssertedProcessInstance = calledProcessInstance();
ProcessInstance someCalledProcessInstanceOflastAssertedProcessInstance = calledProcessInstance("myCalledProcessDefinitionKey");
ProcessInstance someCalledProcessInstanceOflastAssertedProcessInstance = calledProcessInstance(processInstanceQuery().processDefinitionKey("myCalledProcessDefinitionKey"));
You can therefore e.g. write …
assertThat(processInstance).isNotNull();
ProcessInstance calledProcessInstance = calledProcessInstance();
Furthermore you can directly access jobs in the context of a specified super process instance by means of static helper methods:
ProcessInstance onlyCalledProcessInstanceOfProcessInstance = calledProcessInstance(superProcessInstance);
ProcessInstance someCalledProcessInstanceOfProcessInstance = calledProcessInstance("myCalledProcessDefinitionKey", superProcessInstance);
ProcessInstance sameCalledProcessInstanceOfProcessInstance = calledProcessInstance(processInstanceQuery().processDefinitionKey("myCalledProcessDefinitionKey"), superProcessInstance);
You can therefore e.g. write …
ProcessInstance calledProcessInstance = calledProcessInstance("myCalledProcessDefinitionKey", superProcessInstance);
Accessing process definitions
You can directly access process definitions by means of static helper methods:
ProcessDefinition processDefinitionOflastAssertedProcessInstance = processDefinition();
ProcessDefinition processDefinitionOfSpecifiedProcessInstance = processDefinition(processInstance);
ProcessDefinition processDefinitionOfSpecifiedProcessDefinitionKey = processDefinition("myProcessDefintionKey");
ProcessDefinition processDefinitionConformingToSpecifiedQuery = processDefinition(processDefinitionQuery().processDefinitionKey("myProcessDefintionKey");
In order to check, whether your last asserted process instance is the only currently running instance of its own process definition you can therefore e.g. write …
assertThat(processDefinition()).hasActiveInstances(1);
Лицензия и атрибуция
Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .
Оригинал документации: https://docs.camunda.org