Swift   发布时间:2022-04-29  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了core-data – 为什么executeFetchRequest在使用Swift在XCTest下运行时不返回子类对象?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个使用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 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中的子类?

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

>将@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下运行时不返回子类对象?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。