2009-06-17 68 views
1

從我對單元測試的初步讀物(我是一個初學者),將所有的設置和測試放在與正在測試的代碼分開的項目中是明智的。這對我來說也是理想的。不過,我最近開始閱讀單元測試的藝術,試圖發現如何打破數據庫調用等依賴關係。提供的方法涉及更改測試代碼的區域,例如將特定接口和「存根」方法添加到生產代碼。這似乎破壞了保持測試和生產代碼分離的一些好處。如何在不修改生產代碼的情況下打破依賴關係?

是否有任何推薦的依賴打破技術,不涉及更改生產代碼?

+1

首先編寫代碼(例如使用依賴注入方法)。如果你首先對依賴關係進行硬編碼,那麼在沒有代碼修改的情況下,沒有好的辦法可以將它們刪除,只有骯髒的黑客。測試將保持獨立,但生產代碼必須可測試! - ) – 2009-06-17 14:52:54

回答

4

如果不進行某種更改,就無法打破依賴關係。重要的是,您所做的更改不會改變生產中生產代碼的行爲,並且不會引入更差的依賴關係。

3

根據定義,需要在生產代碼中打破依賴關係,以使其更具可測性,即爲了使生產代碼更具可測試性,您需要更改代碼以使其與實際實現的耦合程度降低。這將允許您在測試中用模擬對象替換待測試類中的實際對象。這消除了被測試類所依賴的其他生產類的依賴性。

如果你編寫了鬆散耦合的生產代碼 - 依賴於接口而不是實現的代碼,它使用工廠和依賴注入來創建對象而不是直接實例化 - 那麼你可能只需要做一些小的改變或根本沒有你的生產代碼。如果沒有,那麼你將需要進行這些類型的更改。然而,這不是一件壞事,因爲它會通過減少類之間的耦合來改進您的設計。這個成本將是一些額外的(小)類和/或接口,使隔離成爲可能。

如果您使用TDD(測試驅動的開發/設計),您在生產代碼中使用的構造類型將發生變化,使其更加自然可測試。這是TDD改進設計以及將測試合併到代碼中的方式之一。

請注意,您不應該將生產代碼中的耦合或依賴項引入到測試代碼中。您的測試代碼顯然將依賴於生產,您可能需要重構生產中的依賴關係以使其更易於測試,但是如果您的生產代碼「知道」關於它如何進行測試的任何內容,那麼您可能做了錯誤的事情。當您應該使用依賴注入時,您可能已經引入了人造界面。

0

我們使用Spring和工廠來打破依賴關係。隨着Spring的依賴注入,從開發和測試轉向生產只是一個不同的XML文件。

相關問題