MagicalRecord = swift_dynamicCastClassUnconditional仅在单元测试中

时间:2015-01-07 01:53:54

标签: unit-testing swift magicalrecord

我已经看了好几个小时。我正在使用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")

但这对我的班级特定需求没有帮助

1 个答案:

答案 0 :(得分:0)

这也发生在我身上,但我有一点不同的情况,因为我使用的是ObjC托管对象的子类。由于swift中的单元测试需要一些黑客才能工作,我也将所有文件添加到测试包中,但是我应该省略ObjC文件,因为它们是通过桥接头导入的。

在你的情况下,也许是由于xcdatamodel中指定了错误的类名:看看这个Unable to find specific subclass of NSManagedObject