[英]NSHomeDirectory in iPhone unit test
在單元測試中使用NSHomeDirectory()
我得到:
/Users/hgpc/Library/Application Support/iPhone Simulator/5.0
我期望當前應用程序的實際主目錄。 就像是:
/Users/hgpc/Library/Application Support/iPhone Simulator/5.0/Applications/6D1091C6-02AE-4803-A7DF-D623D0F89579
我究竟做錯了什么?
要解決此問題,請將Unit Test目標構建設置中的Bundle Loader值設置為:
$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName
以及你的測試主持人:
$(BUNDLE_LOADER)
然后你應該找到NSHomeDirectory()
返回正確的值。
不幸的是,在單元測試(或邏輯測試)中 - 你並不是真的“在你的應用程序中”(即它的沙盒)。 這就是NSDocumentDirectory或[NSBundle mainBundle]之類的東西無效的原因。
如果它適合你,我會繼續創建一個“Documents”文件夾
/Users/hgpc/Library/Application Support/iPhone Simulator/5.0
您可能希望在測試的setUp中執行此操作,這樣您就可以在tearDown中刪除它。
如果這不起作用,因為您的測試依賴於已經存在於您的應用程序的NSDocumentDirectory中的內容,您可能需要重新考慮一下您的測試,因為它們都應該是自包含的(即在setUp中安裝捆綁包中的所有資源)
您也可以使用NSLibraryDirectory而不是NSDocumentDirectory,具體取決於您要測試的內容。
如果您想將測試目標定制到Application test,您應該添加Andrew Ebling提到的params:
$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName
以及你的測試主持人:
$(BUNDLE_LOADER)
如果你沒有這個參數,那意味着你的測試是邏輯的。 但是如果你添加這個參數你將測試更改為應用程序測試,並注意到AppDelegate將啟動你是否運行測試。
請參閱鏈接以獲取更多信息
因此,您可以使用NSHomeDirectory(僅適用於應用程序測試)。
在iOS設備上,您應該使用
NSArray *path = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirPath = [paths objectAtIndex:0];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.