2011-11-10 154 views
1

我在+initialize中有一些我想測試的方法(使用簡單的OCUnit)。即它是設置了一些用戶默認,所以我的測試是這樣的應用程序委託:在ObjectiveC中測試類的加載

  1. 檢查沒有值將要設置的;
  2. 加載一個類;
  3. 檢查設定值的存在和正確性;

你有什麼提示我該怎麼做到這一點?

回答

0

是 - 您可以將您的默認初始化實現移出到單獨的函數,您可以從+[MONObject initialize]調用該函數。

在不會將objc類(MONObject)加載到objc運行時的較低級別套件中測試該函數。

然後,您可以測試它並將其銷燬到單獨的可執行文件中,並依靠應用程序級別測試套件中的證明。

+0

似乎我應該得到較低級別測試的單獨目標,然後(以便我的AppDelegate類)不會被編譯/加載)。你認爲我會在用戶默認情況下使用stubbing方法調用,或者期望使用給定值的方法調用嗎? – Eimantas

+0

準確地說 - 低層套件將是一個單獨的目標,它不具備所有應用程序測試/類型。較低級別的目標可以創建,驗證和銷燬它在每次運行時選擇的內容(假設進行串行測試)。應用程序和低級套件可以共享低級別測試的初始化,行爲和錯誤檢查。如果您想*真正*測試它,您還可以創建字典進行測試,並將字典保存爲'standardUserDefaults'或使用'dictionaryRepresentation'。如果它真的很複雜,那麼你可能只想保存一個或多個字典作爲SUD中的一個關鍵字。 – justin

0

當您設置「用戶默認設置」默認當沒有其它值已被存儲在「用戶默認值」,它纔會被使用。因此,如果您從「用戶默認值」中調用一個值,除非您在之前的運行中存儲了值,否則將獲得默認值(請注意,由於「用戶默認值」存儲在兩次運行之間,因此必須刪除設備上的應用程序)。 您應該爲所有「用戶默認值」設置默認值,因爲它僅適用於第一次使用。

我可能誤解了你的問題,但我認爲你是混合默認值和默認值的設置值,當沒有設置時使用。

我也困惑爲什麼你要加載一個類+初始化類方法,在任何實例創建之前調用?

+0

我通常會將用戶默認初始化放入應用程序委託的'initialize'方法中,因爲它是發送到類的第一條消息,表示應用程序是否已完成啓動。這樣我在'applicationDidFinishLaunching:'方法中擁有所有需要的用戶默認值。 – Eimantas