確認簡化LogAnalyzer測試的方法

2022-02-12 00:53:56 字數 1685 閱讀 8601

"任何物件導向的問題都可以通過新增乙個間接層來解決,除非有太多的間接層。"我很喜歡這個觀點(引自我的乙個朋友),因為單元測試中的很多種"藝術"就是找到乙個正確的地方,新增或者使用乙個間接層,以此來測試**。

有些**無法測試嗎?那麼新增乙個層來封裝對這些**的呼叫,然後在測試中模擬這個層,或者使這些**變得可替換(這樣其本身就是乙個間接層)。當 然,這種藝術也包括避免重複新建乙個已經存在的間接層,也包括當這種做法使事情變得過於複雜時,停止使用它。不過,讓我們一步步來。

事實上,測試這段**的唯一途徑,是在檔案系統中建立乙個配置檔案。因為我們正嘗試著避免這種依賴,所以,我們需要**不必借助於整合測試也可輕鬆測試。

回頭看看本章開篇提到的太空飛行員的模擬,我們發現,消除這種依賴有乙個明確的模式:

1. 找到被測物件所對應的介面或者api。在太空飛行員的例子中,就是在太空梭中的操縱桿和控制器,如圖3.2所示。

圖3.2  太空梭模擬器中有真實的操縱

杆和模擬外部世界的螢幕(感謝nasa提供**)

2. 將介面的底層實現替換為你能控制的東西。它涉及各種各樣的飛船監視器、操縱桿和按鈕等,將其連線到控制艙,這樣,測試工程師就能夠控制太空梭的介面向太空飛行員顯示什麼內容。

將這種模式引入**,還需要以下更多步驟。

1. 找到被測方法所對應的介面。(在這個例子中,"介面"並不是純粹的物件導向中的概念,是指需要一起協同工作的方法或者類。)在logan專案中,是指檔案系統配置檔案。

2. 如果介面和我們測試的方法直接相關(在這個例子中,我們是直接呼叫檔案系統),則新增乙個間接訪問層來呼叫介面,以便能夠測試**。在我們的 例子中,新增間接訪問層的方式之一,是將對檔案系統的直接呼叫遷移到乙個單獨的類(比如fileextensionmanager)。後文將看看其他的方 式。(圖3.3顯示在這一步驟後系統設計的樣子。)

3. 將互動介面的底層實現替換為你能夠控制的東西。在我們的例子中,用乙個可以控制的樁類(subextensionmanager)來替換方法所呼叫的類的例項(fileextensionmanager),以便測試**可以控制外部依賴。

圖3.3  引入乙個間接層來解除對檔案系統

的直接依賴。呼叫檔案系統的**剝離出來,放入

fileextensionmanager類。這個類在我們後

面的測試中將被替換為乙個樁類

我們用於替換的例項不會和檔案系統打任何交道,這樣便解除了對檔案系統的依賴。因為我們測試的不是與檔案系統互動的類,而是呼叫該類的**,所以,如果樁類在執行測試的時候只是給出一些必要的響應而不做任何實際的事情,也沒有問題。圖3.4顯示了這種設計上的變化。

圖3.4  引入乙個樁類來打破依賴

圖3.4增加了乙個新的介面。這個新的介面將使物件模型能夠把fileextensionmanager類所做的事情抽象出來,從而允許測試可以新建乙個類似於fileextensionmanager的樁物件。這個方法的介紹參見後文。

我們已經見識過在**中引入可測試性的方式之一--新建乙個新的介面。現在讓我們來了解**重構,和在**中引入接縫的概念。

確認簡化LogAnalyzer測試的方法

任何物件導向的問題都可以通過新增乙個間接層來解決,除非有太多的間接層。我很喜歡這個觀點 引自我的乙個朋友 因為單元測試中的很多種 藝術 就是找到乙個正確的地方,新增或者使用乙個間接層,以此來測試 有些 無法測試嗎?那麼新增乙個層來封裝對這些 的呼叫,然後在測試中模擬這個層,或者使這些 變得可替換 這...

為LogAnalyzer新增源IP

loganalyzer3.6.5安裝後不顯示源ip,參考網上資料,執行下面的步驟後同時顯示ip和host。1 資料庫修改 loganalyzer 預設表字段只有乙個 fromhost,我們在新增乙個 fromip,用於記錄源ip位址。mysql u root p mysql use syslog m...

微信公眾平台簡化註冊流程 確認業務主體不得修改

1 公眾平台簡化註冊流程,填寫業務主體和運營資訊即可註冊 公眾平台簡化註冊流程後,註冊公眾帳號首先選擇帳號型別。選定帳號型別後,再填寫業務主體和運營資訊。2 明確公眾帳號業務主體,一旦確認不能修改 公眾帳號一旦確認業務主體,不得修改。所有業務合同的簽訂都必須使用同乙個業務主體。型別為個人的公眾帳號,...