Java camunda单元测试中的模拟historyService调用

Java camunda单元测试中的模拟historyService调用,java,mocking,camunda,Java,Mocking,Camunda,我正在编写API以访问进程引擎。我想测试是否删除了所有已完成的流程实例。为了实现这一点,我想模拟历史服务。我尝试测试的功能是: public void deleteFinishedProcessInstances(String... processDefinitionNames){ for(String processDefinitionName : processDefinitionNames){ List<HistoricProcessInstance>

我正在编写API以访问进程引擎。我想测试是否删除了所有已完成的流程实例。为了实现这一点,我想模拟历史服务。我尝试测试的功能是:

public void deleteFinishedProcessInstances(String... processDefinitionNames){
    for(String processDefinitionName : processDefinitionNames){
        List<HistoricProcessInstance> finishedInstances = getFinishedProcessInstances(processDefinitionName);
        for(HistoricProcessInstance fi : finishedInstances){
            historyService.deleteHistoricProcessInstance(fi.getId());
        }

        log.info("deleted " + finishedInstances.size() + " history process instances");

    }
}

public List<HistoricProcessInstance> getFinishedProcessInstances(String processDefinitionName){
    List<HistoricProcessInstance> finishedProcessInstances = historyService.createHistoricProcessInstanceQuery().finished().processDefinitionKey(processDefinitionName).list();
    return finishedProcessInstances;
}
public void deleteFinishedProcessInstances(字符串…进程定义名称){
for(字符串processDefinitionName:processDefinitionNames){
List finishedInstances=getFinishedProcessInstances(进程定义名称);
对于(历史过程实例fi:完成实例){
deleteHistoricProcessInstance(fi.getId());
}
log.info(“已删除”+finishedInstances.size()+“历史进程实例”);
}
}
公共列表getFinishedProcessInstances(字符串进程定义名称){
List finishedProcessInstances=historyService.createHistoricProcessInstanceQuery().finished().processDefinitionKey(processDefinitionName).List();
返回已完成的过程指令;
}
如何在单元测试中模拟以下调用:

List<HistoricProcessInstance> finishedProcessInstances = historyService.createHistoricProcessInstanceQuery().finished().processDefinitionKey(processDefinitionName).list();
List finishedProcessInstances=historyService.createHistoricProcessInstanceQuery().finished().processDefinitionKey(processDefinitionName).List();

您可以使用Mockito.RETURN\u DEEP\u存根来执行以下操作

  when(historyService.createHistoricProcessInstanceQuery().finished().processDefinitionKey(processDefinitionName).list())
     .thenReturn(Arrays.asList(pi1,pi2,pi3);
或者尝试支持camunda查询模拟的社区扩展

public class QueryMocksExample {
     private final TaskService taskService = mock(TaskService.class);
     private final Task task = mock(Task.class);

     @Test
     public void mock_taskQuery() {
         // bind query-mock to service-mock and set result to task.
         final TaskQuery taskQuery = QueryMocks.mockTaskQuery(taskService).singleResult(task);

         final Task result = taskService.createTaskQuery().active().activityInstanceIdIn("foo").excludeSubtasks().singleResult();

         assertThat(result).isEqualTo(task);

        verify(taskQuery).active();
        verify(taskQuery).activityInstanceIdIn("foo");
        verify(taskQuery).excludeSubtasks();
     }
 }

您可以使用Mockito.RETURN\u DEEP\u STUBS来执行以下操作

  when(historyService.createHistoricProcessInstanceQuery().finished().processDefinitionKey(processDefinitionName).list())
     .thenReturn(Arrays.asList(pi1,pi2,pi3);
或者尝试支持camunda查询模拟的社区扩展

public class QueryMocksExample {
     private final TaskService taskService = mock(TaskService.class);
     private final Task task = mock(Task.class);

     @Test
     public void mock_taskQuery() {
         // bind query-mock to service-mock and set result to task.
         final TaskQuery taskQuery = QueryMocks.mockTaskQuery(taskService).singleResult(task);

         final Task result = taskService.createTaskQuery().active().activityInstanceIdIn("foo").excludeSubtasks().singleResult();

         assertThat(result).isEqualTo(task);

        verify(taskQuery).active();
        verify(taskQuery).activityInstanceIdIn("foo");
        verify(taskQuery).excludeSubtasks();
     }
 }

我将投票支持卡蒙达方案。我们从来没有遇到过任何问题,而且它很容易使用。我会投票支持camunda bpm mockito选项。我们从来没有遇到过任何问题,它很容易使用。