2011-12-04 67 views
6

當使用NSHomeDirectory()一個單元測試中,我得到:NSHomeDirectory在iPhone單元測試

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0 

我預計當前應用程序的實際home目錄。例如:

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0/Applications/6D1091C6-02AE-4803-A7DF-D623D0F89579 

我在做什麼錯?你「在您的應用程序」(即沙盒)是不是真的 -

回答

5

爲了解決這個問題,你的單元測試的目標構建設置中設定的批量裝載機的價值:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName

,也是你的測試主機到:

$(BUNDLE_LOADER)

你應該然後找到NSHomeDirectory()返回正確的值。

+0

這似乎優於其他解決方案。這是怎麼回事的更加緊密模擬。同樣適用於模擬器和設備。 – lyricsboy

+1

這是默認的,現在呢?在XCode中創建一個新的項目,通過單元測試UT目標的「Bundle Loader」設置與上面的相匹配。 – Parrots

+0

是的,現在是默認設置。 –

0

在iOS設備上,同時在單元測試(或邏輯測試),你應該使用

NSArray *path = NSSearchPathForDirectoriesInDomains(
      NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentDirPath = [paths objectAtIndex:0]; 
3

不幸的是,。這就是爲什麼像NSDocumentDirectory或[NSBundle的mainBundle]不會工作。

如果你的作品,我只是繼續前進,在

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0 

創建一個「文檔」文件夾,您可能想這樣做,在測試的設置,這樣你可以在拆卸刪除。

如果因爲您的測試依賴於您的應用程序的NSDocumentDirectory中已有的東西而無法正常工作,您可能需要重新考慮您的測試,因爲它們都應該是自包含的(即安裝您的所有資源捆綁在setUp中)

您也可以使用NSLibraryDirectory而不是NSDocumentDirectory,具體取決於您要測試的內容。

1

如果您想自定義您的測試目標應用程序測試,你應該添加安德魯Ebling提到PARAMS:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName 

,也是你的測試主機到:

$(BUNDLE_LOADER) 

如果你沒有這個參數,這意味着你的測試是邏輯的。但是,如果你添加這個參數,你將測試改爲應用程序測試,並注意到AppDelegate會在你運行測試的時候啓動。

查看link瞭解更多信息。

所以,你可以使用NSHomeDirectory(用於應用程序測試只。