jbpm5.1介紹(6)
Junit測試的mini流程helloworld
這是一個在demo中使用的Script Task做的簡單示例,在執行到這個任務結點的時候自動輸出"hello world"
開啟BPMN2-MinimalProcess.bpmn2檔案
流程如上圖,流程開始的時候自動執行這個節點,然後在節點上執行輸出的命令
看一看測試程式
public void testMinimalProcess() throws Exception { KnowledgeBase kbase = createKnowledgeBase("BPMN2-MinimalProcess.bpmn2"); StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); ProcessInstance processInstance = ksession.startProcess("Minimal"); assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED); }
在執行完成後斷言一下執行的結果為完成狀態,就是完成狀態是true
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
在控制檯中成功輸出結果
Loading process BPMN2-MinimalProcess.bpmn2 Hello World
表示示例載入執行成功
Junit測試的載入子流程的helloworld
這是一個在demo中使用子流程的示例,功能和上面一樣但是用到了子流程
流程如下圖:
呼叫程式如下:
public void testCompositeProcessWithDIGraphical() throws Exception { KnowledgeBase kbase = createKnowledgeBase("BPMN2-CompositeProcessWithDIGraphical.bpmn2"); StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); ProcessInstance processInstance = ksession.startProcess("Composite"); assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED); }
完成之後狀態如上,並且在控制檯同樣輸出hello world
Junit測試script task
功能和上兩個是一樣的,截圖
執行
public void testScriptTask() throws Exception { KnowledgeBase kbase = createKnowledgeBase("BPMN2-ScriptTask.bpmn2"); StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); ProcessInstance processInstance = ksession.startProcess("ScriptTask"); assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED); }
輸出
Loading process BPMN2-ScriptTask.bpmn2 Hello World
Junit測試輸出list
功能如上,但是在script task中輸出列表
action屬性的內容如下
執行輸出
Loading process BPMN2-Import.bpmn2 [1]
Junit測試Rule Task
這次要載入的檔案有兩個,一個是BPMN2-RuleTask.bpmn2,一個是BPMN2-RuleTask.drl,一個是流程檔案,一個是規則檔案
裡面載入的是Rule Task
並且設定規則為
然後看一下drools規則檔案中的內容
package com.sample;
global java.util.List list;
rule MyRule
ruleflow-group "myRules"
when
then
list.add("Executed");
end
定義了規則組myRules,如果滿足條件那條將加list中添中一條值
於是在我們的測試程式碼中就全看到
assertTrue(list.size() == 1);
看一下完整的測試程式碼
public void testRuleTask() throws Exception {
System.out.println("Loading process BPMN2-RuleTask.bpmn2");
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("junit/BPMN2-RuleTask.bpmn2"), ResourceType.BPMN2);
kbuilder.add(ResourceFactory.newClassPathResource("junit/BPMN2-RuleTask.drl"), ResourceType.DRL);
KnowledgeBase kbase = kbuilder.newKnowledgeBase();
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
List<String> list = new ArrayList<String>();
ksession.setGlobal("list", list);
ProcessInstance processInstance = ksession.startProcess("RuleTask");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
ksession.fireAllRules();
assertTrue(list.size() == 1);
assertProcessInstanceCompleted(processInstance.getId(), ksession);
}
加入兩個配置檔案,並且傳入list,當結點執行完成後,list中的值自動添加了一條。測試結果正常通過。
Junit測試資料物件
這個示例演示的是從外部傳入資料,並且在內部得到資料並且顯示的示例
其中Log節點是一個Script Task,它的Action屬性裡邊設定了值employee,它的值是從外部傳入的
System.out.println("Processing evaluation for employee " + employee);
看一下測試的程式碼
public void testDataObject() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-DataObject.bpmn2");
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
Map<String, Object> params = new HashMap<String, Object>();
params.put("employee", "UserId-12345");
ProcessInstance processInstance = ksession.startProcess("Evaluation", params);
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
傳入的employee的值是"UserId-12345"
執行完成後看輸出的結果
Loading process BPMN2-DataObject.bpmn2 Processing evaluation for employee UserId-12345
顯示我們傳入的資訊,這對我們做流程判斷非常有用。