創建SOCKET,監聽所需的端口WHILE NOT STOP: 從socket中讀數據 IF 數據滿足[條件] THEN 返回[結果數據] END IFEND WHILE
為了適應的不同的被測系統,Stub Server需要跟據情況實現不同的接口協議,對數據包進行解析和封裝,這部分的工作量占據了很大一部分比重,且實際代碼往往單調繁瑣。 這個問題可以利用一些代碼自動生成技術或接口定義語言來解決,這方面的話題不在本文中討論了。
接口實現好了,接下就是跟據需要來返回相應的數據了,對應于前面的流程,其實就是替換其中的[條件]和[結果數據],以適應不同的CASE。那么如何描述 [條件]和[結果數據]自然也就是成了接下來要解決的問題,有時我們會直接將它們硬編碼到程序里,或者使用配置文件來描述[條件]和[結果數據]以觸發程序中不同的處理代碼。如果數據的結構比較簡單,這種方法是很好實現的,但如果數據結構比較復雜,那配置文件格式的設計與數據的解析加載都會是件很煩人的事情,而如果想在配置中添加一些簡單的邏輯以使程序有更大的靈活性,則更是一件煩上加煩的事情。
MockServer的結構
MockServer的設計思想在于將接口的操作和數據的操作分離,在實現樁程序時,只考慮對各種通信接口的包裝,而將[條件]和[結果數據]的構造交給使用者。這樣,同樣一個樁程序,只要是基于相同的通信協議,就可以模擬出任意的行為,就像mock對象可以模擬任意對象的行為一樣。
比如一個基于socket的Mock Server的可以描述為:
創建SOCKET,監聽所需的端口WHILE NOT STOP: 從socket中讀數據 執行[MOCK行為] END IFEND WHILE
其中MOCK行為可能是這樣描述的:
ON: recieve(‘HELLO‘)DO: sendback(‘WORLD‘) keep_alive()ON: recieve(‘QUIT‘)DO: close_link()
可見,Mock Server的核心就是如果實現執行[MOCK行為]
原文轉自:http://www.anti-gravitydesign.com