涉及 NSDocumentDirectory 和其他 iOS App 特定调用的静态库的单元测试

Posted

技术标签:

【中文标题】涉及 NSDocumentDirectory 和其他 iOS App 特定调用的静态库的单元测试【英文标题】:Unit testing of static library that involves NSDocumentDirectory and other iOS App specific calls 【发布时间】:2011-01-04 18:35:12 【问题描述】:

我正在尝试为尝试在文档目录中创建/写入/读取文件的静态库运行单元测试。由于这是一个静态库而不是 ios 应用程序,因此尝试引用 NSDocumentDirectory 将返回表单的目录

"/Users//Library/Application Support/iPhone Simulator/Documents"

此目录不存在。当尝试从实际应用程序访问目录时,NSDocumentDirectory 会返回以下形式的内容:

“/Users//Library/Application Support/iPhone Simulator/4.2/FEDBEF5F-1326-4383-A087-CDA1B865E61A/Documents”

(请注意模拟器版本以及应用程序 ID 作为路径的一部分)

对于实现需要 iOS 应用特定调用的测试的静态库,我如何克服单元测试框架中的这一缺陷?

提前致谢。

【问题讨论】:

【参考方案1】:

您还可以通过模拟您的文件访问来解决此问题,以便测试验证您的代码是否尝试将预期数据写入 NSDocumentsDirectory 给出的路径,而实际上并未触及文件系统。

【讨论】:

【参考方案2】:

我自己解决这个问题。在我的单元测试设置阶段,如果 Document 目录不存在,我将创建它,并在测试完成后将其删除。这有效地让我克服了障碍并继续我的逻辑测试,而不必担心 iOS 应用程序的特殊性。

【讨论】:

[[[NSFileManager alloc] init] removeItemAtURL:fileURL error:NULL]【参考方案3】:

仅对defining a TEST preprocessor macro 的测试使用NSLibraryDirectory 而不是NSDocumentDirectory

然后,删除tearDown 中的文件:

[[[NSFileManager alloc] init] removeItemAtURL:fileURL error:NULL]

【讨论】:

【参考方案4】:

gh-unit 框架可以在模拟器或您的设备上运行单元测试。这不仅可以解决您的问题,还可以让您调试您的应用程序(这是我在其他单元测试框架中所缺少的)。

Download gh-unit

How to install gh-unit

【讨论】:

为了公平对待其他第三方测试工具,实际上只有 Xcode 内置在 SenTestingKit 中,它不支持在设备或模拟器上调试和运行测试。 在Xcode 4, you can set breakpoints in unit tests 中使用SenTestingKit/OCUnit(Xcode 自带的单元测试框架)。此外,逻辑测试在模拟器中运行,应用程序测试在设备上运行,如iOS Development Guide: Unit Testing Applications 和other OCUnit references 中所述。另请参阅:iOS Tests/Specs TDD/BDD and Integration & Acceptance Testing。

以上是关于涉及 NSDocumentDirectory 和其他 iOS App 特定调用的静态库的单元测试的主要内容,如果未能解决你的问题,请参考以下文章

用户升级 iPhone 时是不是传输 NSDocumentDirectory 中的文件

iOS 文件检索 - NSDocumentDirectory

从 NSDocumentDirectory 延迟加载 UITableViewCells 的图像?

使用 NSDocumentDirectory 存储图像不起作用?

如何在单元测试(OCUnit)中访问 NSDocumentDirectory

和其正的复兴梦,藏在气泡水与凉茶的碰撞里?