2015-04-02 75 views
1

我一直试图单元测试使用核心数据的iOS项目。我使用通常由Xcode生成的Core Data堆栈。该线失败如下:NSSearchPathDirectory.DocumentDirectory返回伪造路径

lazy var applicationDocumentsDirectory: NSURL = { 
    let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) 
    return urls[urls.count-1] as NSURL 
}() 

在我的Mac它返回:file:///Users/juliantejera/Library/Developer/CoreSimulator/Devices/{UNIQUE ID}/data/Containers/Data/Application/{UNIQUE ID}/Documents/

在特拉维斯:file:///var/empty/Documents/

因此我的NSManagedObjectContext不能创建和我的应用程序崩溃。任何解决方案

回答

0

经过一个星期,我终于能够通过在运行单元测试时使用NSPersistentStoreCoordinator的NSInMemoryStoreType来解决我的问题。

var isRunningUnitTests = NSClassFromString("XCTest") != nil 
var storeType = isRunningUnitTests ? NSInMemoryStoreType : NSSQLiteStoreType 
0

在我的情况下的问题是猕猴桃和境界的组合: 我在测试规范,这又迫使境界DB进行初始化的context块初始化的对象。不知道究竟是什么导致了这个怪异的行为,但从那时起,我将其作为经验法则来初始化beforeAll块中的变量。