【发布时间】:2021-08-17 03:44:01
【问题描述】:
我有 BPMN 项目并使用 Camunda。
我有委托类,它检查具有相同旅程代码和状态的进程是否存在重复:
@Component
public class CheckIsDuplicateDepartedJourneyProcessedDelegate implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) throws Exception {
String currentProcessInstanceId = execution.getProcessInstanceId();
String journeyCode = DelegateExecutionUtils.getStringVariable(execution, JOURNEY_CODE);
String journeyStatus = DelegateExecutionUtils.getStringVariable(execution, TRIP_STATUS);
boolean hasDuplicate =
execution
.getProcessEngine()
.getRuntimeService()
.createProcessInstanceQuery()
.processDefinitionKey(UPDATE_JOURNEY_STATUS_PROCESS_ID)
.processInstanceBusinessKey(journeyCode)
.variableValueEquals(TRIP_STATUS, journeyStatus)
.list()
.stream()
.anyMatch(process -> !process.getProcessInstanceId().equals(currentProcessInstanceId));
execution.setVariable(DUPLICATE_PROCESS, hasDuplicate);
}
}
如何检查单元测试,该方法 execute(...) 或 execution.getProcessInstanceId() 被调用了 2 次(在 2 个进程中的每个进程中调用 1 次)?我需要检查 2 个进程是否正常工作,并想追踪委托中提到的某些方法是否在每个进程中调用一次(2 个进程中的 2 个)。
我当前的单元测试。它工作得不好,因为说,该方法 execute(...) 没有被调用。
public class UpdateJourneyStatusProcessTest extends BaseTest {
@Spy private CheckIsDuplicateDepartedJourneyProcessedDelegate checkDelegate = new CheckIsDuplicateDepartedJourneyProcessedDelegate();
...
// when
sender.send(firstCommand); // recieving this command initiates process and delegate work
sender.send(secondCommand);
// then
verify(checkDelegate, times(2)).execute(any(DelegateExecution.class)); // says that method was called 0 times
...
}
}
非常感谢您的帮助。
【问题讨论】:
-
更新了答案。这有帮助吗?
标签: java spring unit-testing bpmn camunda