2011-02-06 53 views
1

我目前正在爲一個Python微博庫編寫一組單元測試,並且在這裏接收到的建議已經開始使用模擬對象來返回數據,就好像來自服務一樣(identi.ca在這種情況下)。使用模擬對象而不關聯單元測試

但是,當然通過模擬httplib2 - 我用來請求數據的模塊 - 我將單元測試綁定到我的庫的特定實現,並且移除重構後它們的功能(顯然它是一個主要在寒冷的地方進行單元測試的好處)。

是否有兩全其美的情景?我能想到的唯一辦法就是建立一個微博服務器,僅用於測試,但這顯然是一項大量的工作。

回答

1

你說得對,如果你重構你的庫來使用非httplib2的東西,那麼你的單元測試將會中斷。這不是一個可怕的依賴關係,因爲當時間到了的時候,改變你的測試來模擬新的庫會很簡單。

如果你想避免這種情況,那麼寫一個非常簡單的httplib2包裝,你的測試可以嘲笑它。那麼如果你從httplib2轉移,你只需要改變你的包裝。但請注意,您必須更改的行數是相同的,所有這些變化都是在「測試代碼」還是「非測試代碼」中。

+0

我認爲包裝可能(至少在理論上)減少了換用httplib2所需的更改大小。沒有包裝,你需要改變正在測試的類*和*樣機對象。使用包裝器,你只需要改變包裝器(舊的模型仍然可以工作。)這當然假定包裝器的API足夠普遍,在交換庫後不會改變。 – 2011-02-10 08:53:28

1

不知道你的問題是什麼。模擬課程至少在概念上是測試的一部分。測試可以依賴於他們注入正在測試的代碼中的模擬對象的特定行爲。當然,注入本身應該在單元測試中共享,這樣很容易改變模型實現。

相關問題