spring boot為activiti編寫單元測試
阿新 • • 發佈:2022-05-10
在resources資料夾下建立processes資料夾,把一個測試用的流程定義檔案放到這個目錄,這裡以測試請假流程為例,測試的流程定義檔案叫:leave.bpmn,內容如下:
<?xml version="1.0" encoding="UTF-8"?> <bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:bioc="http://bpmn.io/schema/bpmn/biocolor/1.0" id="sample-diagram" targetNamespace="http://activiti.org/bpmn" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"> <bpmn2:process id="leave" isExecutable="true"> <bpmn2:startEvent id="StartEvent_1" name="開始"> <bpmn2:outgoing>Flow_1jbxdia</bpmn2:outgoing> </bpmn2:startEvent> <bpmn2:userTask id="Activity_0uoi4rj" name="部門稽核"> <bpmn2:incoming>Flow_1jbxdia</bpmn2:incoming> <bpmn2:outgoing>Flow_0fay43k</bpmn2:outgoing> </bpmn2:userTask> <bpmn2:userTask id="Activity_0uo5u5x" name="人事稽核"> <bpmn2:incoming>Flow_0fay43k</bpmn2:incoming> <bpmn2:outgoing>Flow_19f31xq</bpmn2:outgoing> </bpmn2:userTask> <bpmn2:endEvent id="Event_0jf7yel" name="結束"> <bpmn2:incoming>Flow_19f31xq</bpmn2:incoming> </bpmn2:endEvent> <bpmn2:sequenceFlow id="Flow_1jbxdia" sourceRef="StartEvent_1" targetRef="Activity_0uoi4rj" /> <bpmn2:sequenceFlow id="Flow_0fay43k" sourceRef="Activity_0uoi4rj" targetRef="Activity_0uo5u5x" /> <bpmn2:sequenceFlow id="Flow_19f31xq" sourceRef="Activity_0uo5u5x" targetRef="Event_0jf7yel" /> </bpmn2:process> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="leave"> <bpmndi:BPMNEdge id="Flow_19f31xq_di" bpmnElement="Flow_19f31xq"> <di:waypoint x="830" y="258" /> <di:waypoint x="942" y="258" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_0fay43k_di" bpmnElement="Flow_0fay43k"> <di:waypoint x="630" y="258" /> <di:waypoint x="730" y="258" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_1jbxdia_di" bpmnElement="Flow_1jbxdia" bioc:stroke="green" bioc:fill="green"> <di:waypoint x="448" y="258" /> <di:waypoint x="530" y="258" /> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1" bioc:stroke="gray" bioc:fill="#eae9e9"> <dc:Bounds x="412" y="240" width="36" height="36" /> <bpmndi:BPMNLabel> <dc:Bounds x="419" y="283" width="22" height="14" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Activity_0uoi4rj_di" bpmnElement="Activity_0uoi4rj" bioc:stroke="green" bioc:fill="yellow"> <dc:Bounds x="530" y="218" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Activity_0uo5u5x_di" bpmnElement="Activity_0uo5u5x"> <dc:Bounds x="730" y="218" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Event_0jf7yel_di" bpmnElement="Event_0jf7yel"> <dc:Bounds x="942" y="240" width="36" height="36" /> <bpmndi:BPMNLabel> <dc:Bounds x="949" y="283" width="22" height="14" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </bpmn2:definitions>
新建activiti的單元測試類,src/test/java/com/ruoyi/test/ActivitiJunitTest.java,程式碼如下:
package com.ruoyi.test; import com.ruoyi.RuoYiApplication; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.repository.Deployment; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.HashMap; import java.util.List; import java.util.Map; @RunWith(SpringRunner.class) @SpringBootTest(classes = RuoYiApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class ActivitiJunitTest { private static final Logger log = LoggerFactory.getLogger(ActivitiJunitTest.class); @Autowired RepositoryService repositoryService; @Autowired RuntimeService runtimeService; @Autowired TaskService taskService; @Test public void testDeployment() { Deployment deployment = repositoryService.createDeployment() .name("測試流程檔案部署") .addClasspathResource("processes/leave.bpmn") // .addClasspathResource("processes/leave.jpg") .deploy(); log.info("部署的流程id = {}", deployment.getId()); log.info("部署的流程名稱 = {}", deployment.getName()); } @Test public void testStartProcess() { String instanceKey = "leave"; log.info("=== 啟動請假流程 ==="); Map<String, Object> map = new HashMap<String, Object>(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(instanceKey, map); log.info("啟動流程例項成功 = {}", processInstance); log.info("流程例項id = {}", processInstance.getId()); log.info("流程定義id = {}", processInstance.getProcessDefinitionId()); } @Test public void testGetTaskByAssignee() { List<Task> tasks = taskService.createTaskQuery() .taskAssignee("zhaoyun") .list(); Map<String, Object> map = new HashMap<String, Object>(); map.put("leaveReason", "請年假一天"); map.put("leaveDays", 1); for (Task task : tasks) { log.info("任務id = {}", task.getId()); taskService.complete(task.getId(), map); } } }
參考資料: