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

Posted

技术标签:

【中文标题】如何在单元测试(OCUnit)中访问 NSDocumentDirectory【英文标题】:How to access NSDocumentDirectory in unit tests (OCUnit) 【发布时间】:2012-10-23 15:44:00 【问题描述】:

我正在尝试在 OCUnit 环境中运行我的应用程序。它使用一个 sqlite 数据库,我将它放在应用程序的文档文件夹中。

但是,从测试运行时,数据库的路径设置为:

~/Library/Application Support/iPhone Simulator/6.0/Documents/Test.sqlite

虽然相同的代码给了我一条路径

~/Library/Application Support/iPhone Simulator/6.0/Applications/34536EFB-005A-44A1-AD99-07D6B9F6888B/Documents/Test.sqlite

当我在模拟器上运行它时。

如何在我的测试中使用 NSDocumentDirectory 并获得我需要的东西?

【问题讨论】:

【参考方案1】:

应用程序目标与测试目标不同,这就是你得到不同路径的原因。

使用 OCUnit 时,您可以像这样得到测试 NSBundle

NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"myResource" ofType:@"someType"];

您必须将数据库添加到测试目标的资源中并相应地使用它。

或者你可以像这样构建路径(取自OS Answer):

// Test case -> path inside "UnitTests" folder in the project directory
NSString *directory = [[NSFileManager defaultManager] currentDirectoryPath];
NSString *path = [directory stringByAppendingPathComponent:@"UnitTests/"];
path = [path stringByAppendingPathComponent:@"Test.sqlite"];

【讨论】:

以上是关于如何在单元测试(OCUnit)中访问 NSDocumentDirectory的主要内容,如果未能解决你的问题,请参考以下文章

OCUnit 在私有财产上

你还应该在单元测试中进行内存管理吗? (OCUnit)

单元测试和 TDD、OCUnit 与 Google 工具箱

使用 OCUnit 进行单元测试时的 NSBundle 返回(空)

在 iOS 开发中使用 OCUnit 对 XCode 4.5 中的核心数据对象进行单元测试

如何编写 OCUnit 测试用例