2013-08-28 36 views
0

我一直在閱讀很多關於單元測試的內容,並且首次強烈地考慮將它與C++和TDD一起使用。我遇到的問題是我在創建測試時看到的所有示例,在考慮如何開始爲即將開發的項目編寫測試時,這些示例看起來太瑣碎了。這可能是我錯過了單元測試的重點,所以請讓我知道如果這是這種情況。如何決定爲基於規則的系統創建什麼單元測試

很容易理解一個函數,例如檢查素數。它有一個簡單的輸入(要測試的數字)和一個簡單的輸出(true或false)。這裏很容易理解並創建一個單元測試。例如,讓我們以防火牆應用程序爲例,說明具有規則配置文件和評估引擎的防火牆應用程序,以便按特定順序評估這些規則,以便進行特定輸入;網絡數據包的詳細信息,如IP,子網,端口,域等

沒有編寫單元測試,我認爲首先要編寫一個解析器來將規則配置文件解析到類中,然後編寫一個規則引擎將給定的網絡數據包與這些類中的規則進行比較,按照它們被解析的順序遍歷規則,直到找到匹配。

單元測試和TDD指出,在編寫代碼之前,應該先寫入失敗的測試。因此,就防火牆項目而言,您是否會開始編寫測試程序,通過創建模擬文件來檢查文件的解析以提供一組特定的規則,或者這只是測試讀取文件的方式,通常不會推薦用於單元測試,而是集成測試?如果要在這裏完成測試,應該測試什麼?

另外,如何考慮爲這樣的規則引擎編寫測試來評估規則?如果網絡數據包的細節是輸入,則輸出將是數據包是否被接受,拒絕或忽略。這樣的測試幾乎與規則引擎正在做的一樣,那麼如何將其分解爲小的「單元」測試呢?

回答

1

您需要測試解析器。對於給定的輸入字符串,確保正確的規則對象出來。這不會訪問文件,因爲解析器不應該與文件I/O緊密耦合。

您需要爲每個規則進行測試。確保規則提供您希望給定數據包的結果。這可能是最重要的部分;一定要徹底測試邊緣案例。你不要希望這些規則的任何行爲不當,因爲他們會被惡意輸入轟炸。

而且您需要測試規則系統。編寫簡單的測試規則並使用它們來確保規則系統正確地分派數據包並作用於響應。

所有這些都可以很容易地寫在實際的代碼之前。

+0

如果配置文件是XML,那麼您的意思是我應該將XML片段作爲輸入提供給解析器,並使用類對象作爲測試輸出?此外,「需要爲每個規則進行測試」,如果單個規則有10個屬性,並且規則幾乎是無盡的組合,那麼我如何爲每個規則創建一個測試?它可能只是一個改變的端口號,或者一個IP可能是一個IP範圍,或者一個通配符。可以使用任何屬性組合。這是數以千計的可能性。 – TheDarkKnight

+0

單元測試的藝術是找到一組有代表性的輸入。代碼覆蓋工具幫助。 –