簡體   English   中英

iPhone單元測試中的NSHomeDirectory

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM