2014-01-23 48 views
0

我正在使用連接到外部供應商的應用程序。數據異步到達,一些應用程序的「組件」使用這些數據。數據在進入系統之前已經通過語法驗證,但是每個「組件」根據自己的規則對數據是否可用都有不同的定義。數據清理,驗證和測試驅動開發

當爲這些組件中的每一個考慮測試驅動開發時,關於清理+數據驗證的設計的「最佳實踐」是什麼?假設這裏COMPONENT1_VALIADTION和COMPONENT_1將有單獨的測試用例。如果數據首先經過COMPONENT1_VALIADTION,那麼component_1,2,3的測試用例和實現是否可以接受已清理的數據?那麼系統測試可能確保在component_x被調用之前清理數據?

EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> COMPONENT1_VALIADTION -> COMPONENT_1] 
EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> COMPONENT2_VALIADTION -> COMPONENT_2] 
EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> COMPONENT3_VALIADTION -> COMPONENT_3] 

理論上它也可能看起來像:

EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> [ COMPONENT1_VALIADTION -> COMPONENT_1] ] 
EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> [ COMPONENT2_VALIADTION -> COMPONENT_2] ] 
EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> [ COMPONENT3_VALIADTION -> COMPONENT_3] ] 

當測試的組分是[COMPONENT1_VALIADTION - > COMPONENT_X]。這樣每個組件都包含驗證本身。然而,如果我想要使用相同的驗證規則的多個組件,或者想要單獨測試驗證組件,這會使事情變得複雜化。

我試圖避免需要數據驗證的應用程序的每一層..

由於提前,

curious1

回答

0

如果我明白你的問題正確,這似乎是更多的是設計的然後問題單元測試問題。根據數據驗證的複雜程度,將數據驗證組件從應用程序的實際組件中分離出來可能是一個好主意。這樣,一個查看組件的開發人員就不必瀏覽所有的驗證代碼。另外,如果您可以在多個不同的組件上重複使用相同的驗證組件,這可能是一個很好的設計決策。

您需要做的是爲您的每個組件開發一個「合同」。這很可能只是以類和方法文檔的形式來解釋此組件需要輸入的內容以及它將作爲輸出返回的內容。然後您會編寫單元測試,確保您的代碼符合該合同。如果component1不用於處理無效數據,則不需要爲它編寫單元測試,因爲它不是合同的一部分。你會爲你的驗證組件做同樣的事情。

現在,您的開發人員應該確保他們以您描述的方式構建應用程序,以便在常規組件之前調用驗證組件。這是您執行一些集成測試的地方,以確保您的所有組件都正確連接。

我對這個問題有點困惑,所以我希望這會有所幫助。

+0

嗨milleruva,非常感謝您的回覆。你已經完美地回答了我的問題(難以理解它)。我感謝您的幫助! – user3229643