基于.NET開發分布式系統,經常用到Remoting技術。在測試驅動開發流行的今天,如果針對分布式系統中的每個Remoting接口的每個方法都要寫詳細的測試腳本,無疑非常浪費時間。是以,我想寫一個能自動測試remoting接口的小工具InterfaceTester。而且,當分布式系統中的某個remoting接口出現bug時,該小工具可以送出需要模拟的資料,以便在調試remoting服務的環境中,快速定位和解決bug。
InterfaceTester運作起來後的效果如下圖:

1.如何使用
(1)首先,填上要測試的并且是已經釋出的Remoting服務的位址資訊。
(2)選取要測試的remoting接口所在的程式集,一般是一個dll。標明程式集後,InterfaceTester會自動搜尋該程式集中定義的所有接口,并将其綁定到“接口類型”的下拉清單。
(3)從 “接口類型”的下拉清單中選擇要測試的接口。標明接口後,InterfaceTester會自動搜尋該接口中定義的所有方法,并将其綁定到“目标方法”的下拉清單。
(4)從 “目标方法”的下拉清單中選擇要測試的方法,InterfaceTester會根據該方法所要求的參數,自動生成參數錄入界面。
(5)在參數錄入界面上,輸入用于測試的參數的值,然後,點選“調用”按鈕, InterfaceTester便會調用上述指定位址的remtoing服務的指定接口的指定方法,如果調用的方法有傳回值,則會在“調用傳回”的panel上顯示該值。如果傳回的不是一個簡單類型,而是一個對象,則“調用傳回”的panel上将會以xml的形式顯示這個對象的各個屬性值。
2.實作原理
就這個小工具的實作而言,主要用到的技術就是反射(reflection)。另外,需要注意的就是,根據參數的類型,生成錄入界面。具體細節大家可以參見源碼。目前,InterfaceTester支援的被測試方法的參數類型是有限制的:
(1)支援簡單的資料類型,像string、int、bool等。
(2)支援List<>、I List<>、IDictionary<,>、Dictionary<,>等集合類型。
(3)支援簡單的資料結構的class(如像Point、自定義的Entity等)。
3.源碼解決方案
下載下傳源碼并用VS打開後,解決方案下有三個項目:InterfaceTester、DemoInterface、DemoService。
(1)InterfaceTester項目是我們本文的主角:用于remoting接口測試的小工具。
(2)DemoInterface和 DemoService則是為了試試小工具而建構的一個小demo。 DemoInterface定義了釋出的remoting服務的接口, DemoService則是釋出的remoting服務。
在試用時,先啟動 DemoService項目,再啟動InterfaceTester,就可以試試我們的小工具功能了。
對于這個remoting接口測試小工具,大家如果有什麼好的建議,請留言告訴我:)