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

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

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

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

以上结果导致:“致命错误:NSArray元素无法与控制台上的Swift数组元素类型匹配”.

var entitIEs = _managedContext.executeFetchRequest(fetchRequest,error: &error)let e = entitIEs[0] // Works finelet ee = e as NSManagedobject // Works finelet 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中的子类?

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

>将@objc(MyEntity)注释添加到子类中,但这会导致来自Core Data的有关未找到的类的消息,从而返回NSManagedobject实例(显然不能转换为子类)
>链接和提及的建议:How to unit-test NSFetchedResultsController in Swift
>建议:executeFetchRequest throw fatal error: NSArray element failed to match the Swift Array Element type
>敲打头撞墙,直到头晕.我建议不要采取这种措施,因此效率不高.

解决方法 我有一个类似的问题.让我的实体类公开解决问题,我得到正确的类类型.( CoreData class miss match in unit test) 总结

以上是内存溢出为你收集整理的core-data – 为什么executeFetchRequest在使用Swift在XCTest下运行时不返回子类对象?全部内容,希望文章能够帮你解决core-data – 为什么executeFetchRequest在使用Swift在XCTest下运行时不返回子类对象?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1003825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存