2011-05-31 212 views

回答

1

看來,OCUnit不會永久存儲NSUserDefaults,而是存儲在內存中。但是,我可能是錯的。

5

如果您使用Xcode 4與OCUnit集成,它會將測試包注入正在運行的應用程序。 NSUserDefaults因此保存在應用程序本身中。這對於單元測試是有問題的:當您手動運行應用程序時,您的默認值可能已被測試覆蓋。

不是直接使用[NSUserDefaults standardUserDefaults],而是使用依賴注入,將用戶默認值作爲初始化參數傳入。然後你可以通過一個你可以查詢的測試雙。 (依賴注入的替代方法是從輔助方法返回NSUserDefaults,覆蓋該方法以在必要時返回測試雙精度)。

+0

你確定嗎?我使用的是XCode 4,但看起來,使用OCUnit時,「NSUserDefaults」不會被存儲到通常存儲「NSUserDefaults」的應用程序的.plist文件中。其實,我沒有看到他們被存儲。雖然,我可能會錯過一些東西。 – ma11hew28 2011-06-03 11:41:43

2

在我的環境中(Xcode 4.2,在模擬器中運行測試)NSUserDefaults寫入以下文件:

~/Library/Application Support/iPhone Simulator/Library/Preferences/otest.plist` 

我猜你沒有看到,因爲NSUserDefaults的緩存機制(在課堂上引用解釋)的文件,因爲你的項目的單元測試沒有爲緩存時間間隔運行足夠長的時間過去。

otest.plist保證寫入,但如果在測試運行時調用NSUserDefault實例方法synchronize