Испытания юнитов с пружинной загрузкой - асинхронные до / после - PullRequest
1 голос
/ 24 мая 2019

У меня есть модель вложенных вызовов. Я создал модульное тестирование, используя пружинную загрузку Camunda Starter. Тест выглядит как

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class DiagramTest {


    @Autowired
    private ProcessEngine processEngine;

    @Rule
    @ClassRule
    public static ProcessEngineRule rule;

    @PostConstruct
    void initRule() {
        rule = TestCoverageProcessEngineRuleBuilder.create(processEngine).build();
    }

    @Before
    public void setup() {
        ProcessEngineTests.init(processEngine);
    }

    @Test
    @Deployment(resources = {"process.bpmn", "subprocess.bpmn", "sub-subprocess.bpmn"})
    @RequiredHistoryLevel(ProcessEngineConfiguration.HISTORY_NONE)
    public void ruleUsageExample() {


        RuntimeService runtimeService = rule.getRuntimeService();
 runtimeService.startProcessInstanceByKey("process"); }

Моя проблема заключается в том, что на большинстве компонентов, которые я использую async до / после, и из-за этого подпроцессы не запускаются. Когда я удаляю async-s, он работает как положено. Каким должен быть правильный способ проверки асинхронного поведения в camunda bpmn?

1 Ответ

2 голосов
/ 24 мая 2019

Я не совсем уверен, что это решит вашу проблему, но это не поместится в комментарии.

Проблема здесь в том, что экземпляр процесса сохраняется и затем выполняется через следующий поток из пула потоков, поэтому ваш поток, выполняющий модульные тесты, заканчивается. Необходимо проверить, завершено ли задание с помощью запроса к механизму процесса, и выполнить задание вручную. Я использую этот метод утилиты:

public boolean waitUntilNoActiveJobs(ProcessEngine processEngine, long wait) {
    long timeout = System.currentTimeMillis() + wait;
    while (System.currentTimeMillis() < timeout) {
        long jobCount = processEngine.getManagementService().createJobQuery().active().count();
        if (jobCount == 0) {
            return true;
        }
        final List<Job> jobs = processEngine.getManagementService().createJobQuery().list();
        jobs.forEach(job -> processEngine.getManagementService().executeJob(job.getId()));
        System.out.println("Waiting for " + jobs + " jobs");
    }
    return false;
}

Вы называете это в конце вашего теста, параметры кажутся очевидными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...