2010-07-07 51 views
1

我決定在現有項目中添加單元測試(相當大)。 我正在使用「谷歌工具箱的Mac」各種類型的STAssert ...和OCMock框架。我應該測試公共類功能,只改變對象的內部狀態?

但我覺得我測試錯了。例如,我有公共功能saveData,它不返回任何內容,只改變對象的內部狀態。我應該測試它嗎?由於封裝原則 - 我不擔心對象實現多,我不能依賴於私有變量(因爲他們可以在未來改變/刪除)

@implementation Foo 
-(void) saveData { 
internalData_ = 88; 
} 

在實際項目中此功能SAVEDATA是100行,它改變了很多類的私有變量。

那麼,我應該測試它嗎?我有一些以前的單元測試經驗,不能自己做決定。

回答

3

被更改的內部狀態是否會影響該對象後面的任何調用?如果是這樣,你應該包括在像

  • 測試a()
  • 待辦事項SAVEDATA()
  • 測試a()再次單元測試

即使不是,它可能是一個單元測試它的好主意。不是用於確定其他代碼是否會通過使用此方法而中斷,而是用於自動測試方法的正確實現。即使該方法沒有返回任何東西,它可能仍然有某種契約(「如果我稱之爲,這一定會發生」),並且應該檢查是否應該發生什麼事情(例如,在日誌中添加一行文件或其他)。

現在,如何檢查如果方法不返回任何東西,完全是另一個問題。具有諷刺意味的是,這是單元測試的實現細節。