我在运行测试套件时遇到了一些麻烦。基本上我向我的应用程序添加了一个新目标,如下所示: Unit Testing Applications
由于我想测试我的DA-classes和sqlite-database,我使用以下剪辑来复制数据库:
// First, test for existence.
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:DATABASE_Path];
success = [fileManager fileExistsAtPath:writableDBPath];
if (success) return;
// The writable database does not exist, so copy the default to the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:DATABASE_Path];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
但是看起来,NSBundle没有按预期返回数据库的路径。
这有一个简单的解决方法吗?我在最近几个小时内无法修复它 - 所以我的下一个镜头就是你们。
非常感谢任何帮助或建议!
非常感谢!
汤姆
答案 0 :(得分:1)
我刚刚遇到完全相同的问题,继承了一些以非常类似的方式执行原始sqlite访问的代码。
这里有两个问题,他们在其他地方回答了问题。
首先,在测试NSBundle期间,mainBundle没有返回您的想法,如果您希望在单元测试期间依赖于NSBundle mainBundle的代码,则可以将其替换为
[NSBundle bundleForClass: [self class]]
我不确定这是否效率低(可能),但它确实可以在单元测试中使用。
第二个问题是文档目录没有被正确引用,因为单元测试没有在沙盒中运行。有几种方法可以解决这个问题,但最简单的方法就是在〜/ Library / Application Support / iPhone Simulator / 6.1 /中创建一个文档目录。 显然,6.1只是一个例子。
参考文献: -
顺便说一句,我只是喜欢回答旧问题。