gpt4 book ai didi

core-data - 为什么在使用 Swift 的 XCTest 下运行时 executeFetchRequest 不返回子类对象?

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:34 24 4
gpt4 key购买 nike

我有一个使用 CoreData 和 NSManagedObject 子类设置的 Swift 项目。它们有一个类名设置(在 xcdatamodel View 中),其中包括作为类的主要目标名称“MainTarget.MyEntity”,按照 .运行应用程序时一切正常。但是,我使用 XCTest 添加了一些单元测试,当将 executeFetchRequest 的结果转换为正确的类型时,应用程序开始崩溃并出现 ERR_BAD_ACCESS 或 ERR_BAD_INSTRUCTION。我还尝试将数组中的每个元素转换为数组,这也会导致崩溃。在我所有的测试用例中错误都是零。

var entities = _managedContext.executeFetchRequest(fetchRequest, error: &error) as [MyEntity]?

以上结果在控制台上出现:“ fatal error :NSArray 元素无法匹配 Swift 数组元素类型”。

var entities = _managedContext.executeFetchRequest(fetchRequest, error: &error)
let e = entities[0] // Works fine
let ee = e as NSManagedObject // Works fine
let eee = e as MyEntity // Crash: Exception breakpoint, then ERR_BAD_ACCESS - no messages on console

以上会导致崩溃,但只有在从单元测试中调用时才会发生!

我有两个目标,一个主要目标和一个测试目标(正常默认设置)。 NSManagedObject 类被选择在两个目标中,以便测试可以访问它们。这些子类是用 Swift 而不是 Objective-C 编写的。

在单元测试期间,我使用内存中的 persistentStoreCoordinator(尽管我尝试在 AppDelegate 中使用相同的设置,结果相同)。

Swift 的调试器几乎没用(抱歉不得不发泄)。当我查看 executeFetchRequest 返回的数组的变量时,它不会扩展以显示元素,并且任何“po”它或它的内容的尝试都会使 XCode 完全崩溃——再加上 SourceKit 每 3 分钟崩溃一次,这使得非常令人沮丧的一天......但我离题了。我能看到的唯一有用的信息是返回的数组是 TestTarget.MyEntity 而不是 MainTarget.MyEntity。我认为,在转换时,它试图转换为 MainTarget.MyEnity(因为被测代码驻留在 MainTarget 中),因此尝试崩溃。

能够对涉及 Core Data 的代码进行单元测试似乎是一件很基本的事情,我无法相信这是多么令人沮丧。有没有人能够让 XCTests 与 NSManagedObject 子类一起工作?如何让 CoreData 返回 MainTarget 中的正确子类而不是 TestTarget 中的子类?

我尝试的其他一些事情包括:

  1. 将@objc(MyEntity) 注释添加到子类,但这会导致来自 Core Data 的消息关于未找到该类,因此返回 NSManagedObject 实例(这显然不能转换为子类)
  2. 此处链接和提及的建议:How to unit-test NSFetchedResultsController in Swift
  3. 此处的建议:executeFetchRequest throw fatal error: NSArray element failed to match the Swift Array Element type
  4. 用头撞墙直到头晕。我建议不要采取这种措施,它不是很有成效。

最佳答案

我有一个类似的问题。公开我的实体类解决了这个问题,我得到了正确的类类型。( CoreData class miss match in unit test )

关于core-data - 为什么在使用 Swift 的 XCTest 下运行时 executeFetchRequest 不返回子类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26599342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com