1. 程式人生 > 其它 >jbpm5.1介紹(6)

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

顯示我們傳入的資訊,這對我們做流程判斷非常有用。