我一直在尝试对使用Core Data的iOS项目进行单元测试。我正在使用由Xcode生成的通常的Core Data堆栈。该行失败的原因如下:
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/
on travis:file:///var/empty/Documents/
因此无法创建我的NSManagedObjectContext,我的应用程序崩溃了。任何解决方案?
答案 0 :(得分:0)
一周之后,我终于能够通过在运行单元测试时为NSPersistentStoreCoordinator使用NSInMemoryStoreType来解决我的问题。
var isRunningUnitTests = NSClassFromString("XCTest") != nil
var storeType = isRunningUnitTests ? NSInMemoryStoreType : NSSQLiteStoreType
答案 1 :(得分:0)
在我的情况下,问题是Kiwi和Realm的结合:
我正在初始化测试规范的context
块中的对象,这反过来又强制Realm DB被初始化。不确定究竟是什么导致这种奇怪的行为,但从那以后我将其作为一个经验法则来初始化beforeAll
块中的变量。