對SharePoint Workflow進行單元測試是一個非常大的挑戰。因爲SharePoint Workflow 和
SharePoint結合得十分緊密。衆所周知,Workflow必須要寄宿到宿主應用程序中才能運行,因此,Workflow的開發者必須要定義
Communication服務,使得宿主程序和Workflow之間能夠交互數據。由於SharePoint
Workflow的宿主固定爲SharePoint,所以SharePoint
Workflow能夠預先做好Communication服務,並提供一系列封裝好的Activity,如CreateTask,
OnTaskChanged等。這樣的確方便了Workflow的開發,使開發者更集中於業務邏輯。同時,SharePoint和Workflow的耦合
度也大大地增加了。
目前除了購買專門針對SharePoint Workflow的單元測試軟件,好像還沒有更好的辦法。但是,我們可以儘可能地把業務邏輯分離出來,對這部分邏輯進行單元測試。我把SharePoint Workflow開發過程中涉及的邏輯分爲兩部分:
1. Workflow的流轉邏輯。這部分邏輯是在Visual Studio Workflow Designer裏設計的,很難進行單元測試。
2.
自定義的業務邏輯。這部分邏輯是指在Workflow的每一步或每一個狀態中涉及的業務邏輯。如在CreateTask活動invoke的時候,我們會根
據自己的邏輯去決定這個task應該分配給誰,標題是什麼等等。這部分邏輯可以用我即將講到的方法分離出來進行單元測試。
爲了將自定義的業務邏輯和整個Workflow的流轉分開,我們必須加入一個能夠根據業務邏輯修改Workflow內容的模塊。使用MVP(Model View Presenter)可以很好地達到目的。下圖是使用MVP設計模式後的Workflow設計圖:
圖1. MVP Workflow High Level Design
SharePoint Workflow View: 將業務邏輯中所需要用到的數據收集起來,並暴露給Workflow Presenter.
Workflow Presenter: 負責從Workflow View中取出數據,並使用Operator提供的Method執行業務邏輯。同時,根據Operator返回的數據修改Workflow View中的數據。
Workflow Operator: 處理業務邏輯。
由此可見,只要針對Workflow Operator進行單元測試,就可測試所有的自定義業務邏輯。
接下來是一個例子。先看一下整個設計框架:
圖2. MVP Workflow UML
爲了使Workflow1能夠暴露我們所需要的數據,定義一個IWFView接口。讓Workflow1實現該接口,這樣,Presenter就可獲得處理業務邏輯所需的數據。
定義IWFOperator,規定處理業務邏輯的操作。
SPTaskDTO是一個Data Transfer Object.
它用於將Operator的執行結果傳遞給實際的數據對象。在這裏,SPTaskDTO存有通過WFOperator.CreateTask()創建的
task信息,WFPresenter負責將task信息取出,並通過IWFView.get_CreateTaskProperties().xxx
= task.xxx 改變Workflow1的數據。
以下是整個應用程序的順序活動圖:
圖3. MVP Workflow Sequence Diagram
通過MVP設計模式,可以將自定義業務邏輯完整地分離出來,從而可以進行單元測試。但是,Workflow的流轉邏輯依然無法測試,希望有高手能夠給出一點建議。
源代碼請在附件中下載。
MVP 設計模式在 SharePoint Workflow 中的應用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
FX2LP 可以最簡單的Template Code
sychen0608
2020-12-12 19:41:50
C# 數字轉換成文字 十進位 ==> 二進位/十六進位
sychen0608
2020-12-12 19:17:09
【C#冷知識系列】(四)關於枚舉的冷知識
Charles吳
2019-02-24 12:56:05
C#實現的18位身份證格式驗證算法
sccdliangl
2019-02-23 13:53:12
關於C#解決無法解析skinEngine和使用皮膚的問題
讓微笑永恆
2019-02-23 13:32:33
VS 2019要來了,是時候瞭解一下C# 8.0新功能
微软
2019-02-23 08:03:53
ASP.NET開發
xiaohaidage
2019-02-23 00:43:11
步步爲營 C# 技術漫談 四、垃圾回收機制(GC) 中
liudy8302
2019-02-23 00:43:08