2015-01-07 4 views
1

Я просмотрел это в течение нескольких часов. Я использую MagicalRecord. Все хорошо в применении, но в единичных тестах я получаю ошибку swift_dynamicCastClassUnconditional когда я запускаю следующий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") 
} 

как последние сообщения свидетельствуют, что мне нужно сделать мои модели Objective C дружественные с @objc(ModelName) ... так я уже сделал это:

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

покончив с MagicalRecord для испытаний, а также с использованием стандартным «шаблонным стек Core Data» - благодаря [этому посту ] (http://alanduncan.me/blog/2014/09/28/swift-core-data-tests/) я могу по крайней мере проверить свои модели и их расширения – mcconkiee

+0

Вы когда-нибудь выясняли, как сделать эту работу WITH MagicalRecord ? – AnthonyM

ответ

0

Это происходит со мной, но я был немного другой сценарий, так как я использую подклассы управляемого объекта ObjC. Так как Unit Tests in swift требует некоторых хаков для работы, я также добавил все файлы в тестовый комплект, но я должен был опустить объекты ObjC, поскольку они импортируются через мост.

В вашем случае, может быть, это связанно с именем неправильного класса, указанным в xcdatamodel: посмотрите на этой Unable to find specific subclass of NSManagedObject

Смежные вопросы