iPhone单元测试中的NSHomeDirectory

时间:2011-12-04 21:24:25

标签: iphone ios unit-testing file-io

在单元测试中使用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

我做错了什么?

4 个答案:

答案 0 :(得分:6)

要解决此问题,请将Unit Test目标构建设置中的Bundle Loader值设置为:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName

以及您的测试主持人:

$(BUNDLE_LOADER)

然后您应该找到NSHomeDirectory()返回正确的值。

答案 1 :(得分:3)

不幸的是,在单元测试(或逻辑测试)中 - 你并不是真的“在你的应用程序中”(即它的沙盒)。这就是为什么像NSDocumentDirectory或[NSBundle mainBundle]这样的东西不起作用。

如果它适合你,我会继续在

中创建一个“Documents”文件夹
/Users/hgpc/Library/Application Support/iPhone Simulator/5.0

您可能希望在测试的setUp中执行此操作,这样您就可以在tearDown中删除它。

如果这不起作用,因为你的测试依赖于应用程序的NSDocumentDirectory中已有的内容,你可能需要重新考虑一下你的测试,因为它们都应该是自包含的(即从你的软件包中安装所有资源)在setUp)

您也可以使用NSLibraryDirectory而不是NSDocumentDirectory,具体取决于您要测试的内容。

答案 2 :(得分:1)

如果您想将测试目标定制到Application test,您应该添加Andrew Ebling提到的参数:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName
     

以及您的测试主持人:

$(BUNDLE_LOADER)

如果你没有这个参数,那就意味着你的测试是逻辑的。但是如果你添加这个参数,你可以将测试更改为应用程序测试,并注意到AppDelegate会在你运行测试时启动。

有关详细信息,请参阅link

因此,您可以使用NSHomeDirectory(仅适用于应用程序测试。

答案 3 :(得分:0)

在iOS设备上,您应该使用

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