我已经看了好几个小时。我正在使用MagicalRecord。在应用程序中一切都很好,但在单元测试中,当我运行以下内容时出现swift_dynamicCastClassUnconditional
错误
func testExampleQCPerson() {
let person = QCPerson.MR_createEntity() as QCPerson //error happens here
person.displayOrder = NSNumber(integer: 0)
let personB = QCPerson.MR_createEntity() as QCPerson
personB.displayOrder = NSNumber(integer: 0)
personB.updateOrderForPrevious()
XCTAssert(person.displayOrder.integerValue == 1, "should have incremented")
}
正如过去的帖子所示,我需要使用@objc(ModelName)
使我的模型与C友好...所以我已经这样做了:
import Foundation
import CoreData
@objc(QCPerson)
class QCPerson: NSManagedObject {
@NSManaged var person_id: NSNumber
@NSManaged var displayOrder: NSNumber
@NSManaged var contactRefrence: String
@NSManaged var name: String
@NSManaged var actionType: String
}
虽然这使得应用程序的其余部分功能正常,但我真的更愿意能够测试一些东西。我想补充一点,我可以在单元测试中做到这一点
let xx: AnyObject = QCPerson.MR_createEntity() as AnyObject
XCTAssertNotNil(xx, "should exists")
但这对我的班级特定需求没有帮助
答案 0 :(得分:0)
这也发生在我身上,但我有一点不同的情况,因为我使用的是ObjC托管对象的子类。由于swift中的单元测试需要一些黑客才能工作,我也将所有文件添加到测试包中,但是我应该省略ObjC文件,因为它们是通过桥接头导入的。
在你的情况下,也许是由于xcdatamodel中指定了错误的类名:看看这个Unable to find specific subclass of NSManagedObject