iPhoneunit testing中的NSHomeDirectory

在unit testing中使用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()返回正确的值。

不幸的是,在unit testing(或逻辑测试)中 – 你并不是真的“在你的应用程序中”(即它的沙盒)。 这就是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];