【问题标题】:NSManagedObjects properties always nil with Quick-NimbleNSManagedObjects 属性总是 nil 与 Quick-Nimble
【发布时间】:2018-08-14 21:54:36
【问题描述】:

过去,我在 XCTests 中测试了我的 CoreData 层,方法是在内存中设置托管对象上下文,如 this post 中所述。基本上:

class func setUpInMemoryManagedObjectContext() -> NSManagedObjectContext {
        let managedObjectModel = NSManagedObjectModel.mergedModel(from: [Bundle.main])!
        let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)

        do {
            try persistentStoreCoordinator.addPersistentStore(ofType: NSInMemoryStoreType, configurationName: nil, at: nil, options: nil)
        } catch {
            print("Adding in-memory persistent store failed")
        }

        let managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
        managedObjectContext.persistentStoreCoordinator = persistentStoreCoordinator

        return managedObjectContext
    }

最近我一直在使用具有相同设置的 Quick/Nimble,在 expect 语句中,它总是将我的 NSManagedObject 的属性读取为 nil,即使它们在我调试测试时具有值。比如savedItem是一个NSManagedObject实例,当我把它的属性存储在一个变量中时,它会通过:

let name = savedItem.name
it("should have a name") {
    expect(name).to(equal(item.name))
}

但如果我直接测试savedItem.name

it("should have a name") {
    expect(savedItem.name).to(equal(item.name))
}

测试失败并显示消息:expected ... got <nil>

如何使用 Quick/Nimble 直接测试我的 CoreData 对象?

【问题讨论】:

    标签: ios unit-testing core-data nsmanagedobject quick-nimble


    【解决方案1】:

    我遇到的奇怪行为似乎与我在context 闭包内但在it 闭包之前直接初始化我的NSManagedObject 的事实有关。当我在 beforeEach 闭包(context 内部)中初始化它时,它的行为符合预期。

    【讨论】:

      猜你喜欢
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多